有符号数 的 补码概念

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

你可能感兴趣的:(有符号数 的 补码概念)