二进制原码、反码、补码和位运算
最近复习数据结构和算法,顺便复习下计算机的基础。
1、二进制原码、反码、补码
计算机中存储和运算是以二进制的补码进行,原码是方便用户的习惯。
正数的反码、补码都等于原码;
负数的反码是符号位(最高位)不变,其他位取反,补码为反码+1,逢2进1。
int为4个字节,也就是32个比特,int -3 其二进制表示为
10000000 00000000 00000000 00000011,内存运算时反码为
11111111 11111111 11111111 11111100
+1 为补码
11111111 11111111 11111111 11111101
2、位运算
负数是以补码参加运算,结果再转成原码;
& 与 有0则0;
| 或 有1则1;
^ 异或 不同则位1;
~ 取反
<< 左移 右边补0,左移几位则等同于乘以2的几次方;
>> 右移 左边是补高位值,右移几位等同于除以2的几次方;
>>> 无符号右移 左边补0;
打听下这个变量名谁起的