ps:每次看每次忘,写一遍看能不能记住 fuck
1.
针对的是有符号数,也就是最高位是符号位 1表示是负数 0表示正数
1000 0011 代表有符号数就是-3
2.
原码 也就是-3 符号位 表示正负 后7位表示数值
3.
反码:0000 0011 的反码还是 0000 0011
1000 0011的反码是 1111 1100
4.
补码
0000 0011 补码 0000 0011
1000 0011 补码 1111 1100 +1= 1111 1101
5.要补码干嘛
计算机只有加法运算
1-1=0 在计算机中 是这样 1+(-1)=0;
所以 一个数的符号位也要参与运算(符号位参与运算,就可以全部统一为加法运算?)
我们分别用 原码 反码 补码 来计算下1 - 1的结果:
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [1000 0010]原 = -2
1 - 1 = 1 + (-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
1 - 1 = 1 + (-1) = [0000 0001]补 + [1111 1111]补 = [0000 0000]补 = [0000 0000]原 = 0
在8位二进制中,使用补码表示的范围为[-128,+127],0没有符号。
就是随便给一个8位,其实它是补码 ,然后转化为对应的原码,也就是实际要表示的数字
比如 给一个 0000 1000 明显表示的是一个正数 也就是 8
比如 0111 1111 明显也是正数 即127
比如 1000 0010 先减去1 得到反码 1000 0001 然后再把后7位取反,得原码 也就是 1111 1110,那这个数是-126
从1000 0010 表示-126,可以才出来 1000 0000 是最小的负数-128
也就是java 中 byte 可以表示的范围-128到127