原码 补码 反码
数值在计算机中是以补码的方式存储的
正数的原码 补码 反码 都一样
负数:
原码:[-9] 11001
反码:[10110] 第一位不变,其余取反
补码:[10110]+1 ->[10111] 原码的基础上符号位不变,其余各位取反,最后加一,
【反码的基础加一】。
取反:[~补码] :[01000]
取反的公式:-(a+1)
算法和逻辑左右移:
逻辑左移时,最高位丢失,最低位补0;
逻辑右移时,最高位补0,最低位丢失;
算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。
算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;
循环左移时,将最高位重新放置最低位
循环右移时,将最低位重新放置最高位
使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。例如:
1010100010101
逻辑左移一位结果为 0101000101010
逻辑右移一位结果为 0101010001010
算术左移一位结果为 1101000101010
算术右移一位结果为 1101010001010
循环左移一位结果为 0101000101011
循环右移一位结果为 1101010001010