二进制运算符:【太难了太难了~】
2020-11-04 11:55:02
二进制运算
二进制运算是对比特位进行运算,底层运算的优点是速度快,缺点是不直观,使用范围窄;
位运算符只对整数起作用,如果不是整数就会自动转为整数后执行
- 按位取反:~
- 或:|
- 与:&
- 异或:^
- 左移:<<
- 右移:>>
- 头部补零右移运算符:>>>
javascript:
数值是64位浮点数形式存在;
位运算是32位带符号的整数进行运算;
或运算符:|
逐位比较两个数,先将数值转为二进制数,只要有一个为1就是1,否则为0
0 | 3 // 3 00 | 11
与运算符:&
逐位比较两位数,先将数值转为二进制数,只要有一个为0就是0,否则为1
否运算符:~
- 每个二进制按位取反:先将数字转为32位的二进制,然后将二进制按位取反;
- 第一位为符号位:0正1负
- 减1再一次取反得到的值 或者是(自身的取反值+自身)
- 小数:保留整数部分进行否运算
- 字符串:先调用Number函数,将字符串转为数值
异或运算符:^
两个数不同的时候返回1【true】,相同的时候返回0【false】
0 ^ 3 // 3
00^11====11===3
左移运算符<< + 右移运算符>>
左移相当于取整;右移相当于除2的次方取整
5 >> 1 // 2 // 相当于 5 / 2 = 2 21 >> 2 // 5 // 相当于 21 / 4 = 5 21 >> 3 // 2 // 相当于 21 / 8 = 2 21 >> 4 // 1 // 相当于 21 / 16 = 1
头部补零的右移运算符>>>
右移的时候,不论是否是符号位都补零,得到的值是正数
4 >>> 1 // 2 -4 >>> 1 // 2147483646 /* // 因为-4的二进制形式为11111111111111111111111111111100, // 带符号位的右移一位,得到01111111111111111111111111111110, // 即为十进制的2147483646。 */
你的代码量决定了你的薪资水平!