发表于: 2020-03-06 19:51:56

0 1341


今天完成的事情:

# 求余和求模

%:求余

x % y

1. 求余 x rem y : x - n * y,n表示商取整(直接去掉小数,向0取整)
```
x = 7,y = 3;  x rem y = x - n * y = 1 

n = x / y =2.333 约等于2
```

```
x = 7 , y = -3

n = 7 / -3 = -23333 约等于 -2

x rem y = x - n * y = 7 - (-2) * (-3) =1
```

```x = -7 , y = 3

n = -7 / 3 = -23333 约等于 -2

x rem y = x - n * y = -7 - (-2) * 3 = -1
```
余数和被除数的符号相同

2. 求模 x mod y  x - n * y,n表示商取整(向下取整)

```js 
x = 7 , y = -3

x mod y = x - n * y = 7 - (-3) * (-3) = 7 - 9 = -2

n = 7 /-3 =-2.333 //约等于-3
```


```js 
x = -7 , y = 3

x mod y = x - n * y = -7 - 33= -7 + 9 = 2

n = -7 /3 =-2.333 //约等于-3
```
**求模的符合与除数相同**


明天计划的事情:

继续学习


遇到的问题:

下面这个虽然理解了但是用起来不太灵活 多尝试

位的叠加(开关)

```js
 
        //保存了所有可能的权限
        var perm = {
            read: 1//读权限 001
            write: 2,//写(修改)权限 010        
            create: 4//创建权限 100
        };
        //变量p保存读 写权限
        var p = perm.create | perm.write//110 在010 和 100 的位置都有1了 有权限
        
        //去掉可读权限
        p = p | perm.read ^ perm.read;  // 110
        
        //判断权限:p中是否有可读权限
        //p:000 !== 001  无权限
        p & perm.read === perm.read ? console.log("有权限") : console.log("无权限")


```


收获:

## 模板字符串

```js
var user = {name: "小王",age: 18}
`我叫${user.name},今年${user.age}岁,目前${user.age >= 18 ? "已成年":"未成年"}`
```

## void 运算符

一元运算符

写法

1. 普通写法:``` void 表达式 ```
2. 函数写法:``` void (表达式) ```

运行表达式,然后返回undefined

## typeof 运算符

一元运算符

写法

1. 普通写法:``` typeof 表达式 ```
2. 函数写法:``` typeof (表达式) ```

typeof运算符,返回表达式的类型,是一个字符串

## 逗号运算符

写法:表达式1.表达式2

依次运行两个表达式,返回表达式2

逗号运算符的优先级比赋值符更低




# 位运算

将一个整数的二进制格式进行运算

JS中,如果对一个数据进行位运算,它首先会将其转换为一个整数,并且按照32位的整数二进制排列

```
2.3 -> 2 -> 0000 0000 0000 0000 0000 0000 0000 0010  

第一个数0表示正数,1表示负数

NaN -> 0

Infinity -> 0 
 
-Infinity  -> 0
```

## 位与运算

符号:& 

写法:整数1 & 整数2 

将两个整数每一位进行比较,如果都为1,结果为1,否则结果为0

## 或运算

符号:|

写法:整数1 & 整数2

将两个整数每一位进行比较,如果都为0,结果为0,否则结果为1

## 否(非)运算

符号:~

写法:~整数

将该整数按位取反(1)

**负数的存储方式**

-1

真码:1000 0000 0000 0000 0000 0000 0000 00001
反码:1111 1111 1111 1111 1111 1111 1111 11110 真码取反
补码:1111 1111 1111 1111 1111 1111 1111 11111 反码加1 最终的存储方案

所以,负数二进制-1,将0看作1,1看作0

取反的快速运算:-数字 -1
```
~-2-1
```

JS中最快速的取整方式:``` ~~整数 ```

## 异或运算

符号:^

写法:数字1 ^ 数字2

将数字1和数字2按位比较,不同取1,相同取0

```js
console.log(1 ^ 3);
//01
//11
//10 等于2
```

```js
//交换变量
var a =5 ,b = 3 ;
//101 5
//011 3
a = a ^ b;  //110 
b = a ^ b;  //101 5
a = a ^ b;  //011 3
```


## 位移运算

左位移: <<

写法:数字1 << 数字2  结果:数字1 * 2 ^ 数字2

将数字1的二进制(除符号外,左移动数字2的位数)



右位移: >>

写法:数字1 >> 数字2  结果:数字1 / 2 ^ 数字2

全右位移:>>>

与右位移的区别,在于全右位移会导致符号位跟着位移

0000 0000 0000 0000 0000 0000 0000 00100




返回列表 返回列表
评论

    分享到