注意的规则:
01.整数的 三个码都是一致的,不需要转换 02.负数必须转换成补码才能运算! 03.计算机真正参与运算的是 补码! 04.在java中所有的数字都是有符号的! 符号位 0 正数 1负数 05.符号位就是最高位也是最左边的一位! 06.负数的反码=符号位不变+其他位取反(1变0 0变1) 07.负数的补码=反码+1
算术的右移 和 算术 左移
算术的右移: 01.符号位不变 02.低位溢出删除 03.高位补零!1 10 >> 1 10的2进制数字 右移一位 2 3 >>:位移的方向 4 1 :位移的位数 5 6 首先找到10的2进制 7 8 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》10的2进制 9 >>1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》右移1位的结果10 ==================================================================11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 ==》512 13 14 -1 >> 115 首先找到-1的2进制16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ==>-1的2进制 原码17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ==>-1的2进制 反码18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ==>-1的2进制 补码 19 >> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 120 ================================================================21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码22 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码23 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》原码 -124 25
算数左移:
01.符号位不变 02.高位溢出删除 03.低位补零!1 << 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》1的补码0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ========================================================================0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ==>结果16
逻辑右移, 没有逻辑左移! >>>
01.不管符号位; 02.地位溢出删除; 03.高位补0-1 >>> 1 -1逻辑右移1位1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》-1的原码1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码>>> 1============================================================ 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的逻辑右移1位2147483647 int类型的最大值
位运算: & | ^ ~
01. & 按位与 :两位都是1,结果是1
3&40 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 & 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ===========================================0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
02.| 按位或 :两位有一位是1,结果是1
3|40 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ===========================================0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
03.^ 按位异或 :两位必须是一个为0,一个为1,结果才是1
3^40 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ^ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ===========================================0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
04.~ 按位取反,只能是一个表达式使用
正数的按位取反= 自身的负数 -1 负数的按位取反= 自身的绝对值 -1
~x =====> - (x+1)
~3 =====> -40 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 ==》结果的补码==================================================== 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ==》结果的反码1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ==》结果的原码======================================================= -4