发表于: 2020-03-06 19:51:56
0 1349
今天完成的事情:
# 求余和求模
%:求余
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 - 3* 3= -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
评论