位操作符用于最基本的层次上,即按内存中表示的数值的位来操作数值。位操作符不能直接操作64位的值,而是先将64位的值转换为32位的整数,然后执行操作,最后转为64位。对于有符号的整数,32位中的前31位用于表示整数的值,第三十二位表示数值的符号,0表示正值,1表示负值。这个表示符号的位叫做符号位。
负数的同样是以二进制码存储,但使用的格式是二进制补码。计算一个熟知的二进制补码,需要经过三个步骤
1)求这个数值绝对值得二进制码(例如-18的二进制补码,先求18的二进制码)
求-18的二进制补码,首先求得18的二进制码,即
0000 0000 0000 0000 0000 0000 0001 0010
2)求二进制的反码,即将0,1互换;
1111 1111 1111 1111 1111 1111 1110 1101
3)最后,二进制反码加一;
1111 1111 1111 1111 1111 1111 1110 1101
1(进位)
1111 1111 1111 1111 1111 1111 1110 1110
在对NaN和Infinify值应用位操作符时,会被当做0处理。
按位非(~)
var num &