常见运算符
&(与),|(或),^(异或),~(非),>>(算数右移),<<(左移),>>>(无符号右移)
需要关注的几个:
- 算术右移: 左边空出的位是根据最高位是0和1来进行填充的;
- 无符号右移动: 左侧空出来的位由 0 填充
- 左移: 右边空出来的位由 0 填充
- 异或: 相同为 0 ,不同为 1
注意知识点
-
负数在计算机里面是以补码的形式存在的。
-
原码,反码,补码
-
原码:就是一个数的二进制
-
反码:二进制的按位取反
-
补码,二进制的按位取反加一
举个例子:
9 在计算机中的存储为:0...1001
-9 在计算机中存储为:1...0111(最左侧为符号位)
-9 的运算过程:0...1001 -> 1...0110 -> 1...0111
练习一下位运算
- -9 >> 2 = -3
表示: -9 向右带符号位移动两位
解法: 1...0111 ->(右移两位) 1...01 ->(减一)1...00 -> (取反) 1...11 最后得到 -3
- ~9 = -10
表示:对9取反
解法:0...1001 ->(取反得负数,为一个补码) 1...0110 ->(减一)1...0101 -> (取反) 1...1010 最后得到 -10
为什么减一,因为负数在保存的时候加了一,所以在转换成十进制的时候要减一
js 中的进制转换
十进制转二进制
NumberObject.toString(radix);
其中,radix为可选。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。
返回值
数字的字符串。例如,当 radix 为 2 时,NumberObject 会被转换为二进制值表示的字符串。
抛出
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
其他进制转十进制
parseInt(string, radix);
其中,string为必需。要被解析的字符串。radix为可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则parseInt() 将返回 NaN。
返回值
返回解析后的数字。
说明
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。