发布网友 发布时间:2022-04-24 14:32
共4个回答
热心网友 时间:2023-10-16 13:25
正数的原码,补码,反码都相同,都等于它本身
负数的补码是:符号位为1,其余各位求反,末位加1
反码是:符号位为1,其余各位求反,但末位不加1
也就是说,反码末位加上1就是补码
例:
-1011
原码:11011
反码:10100 //负数时,反码为原码取反
补码:10101 //负数时,补码为原码取反+1
你的问题:1后面16个0 减去 101后能得到13个1 和011
-5,本来是10000...101(最高位是符号位), 取反111...010, 加一,111...011。
这才是补码的意义所在。但是取反加一这个操作对于人类而言运算较为不便,
于是才有用个模去减去其绝对值。你会发现两个结果相等。
8位的模是10000000,16位模10000...
热心网友 时间:2023-10-16 13:25
a = b(mod c) 其实就是说 a 和b除以c得到的余数是相同的。 很明显同余关系对所有整数形成一个划分, 在每一类当中指定一个代表性的,就是 [0 c)区间里的那个。
如果把补码记录的看作是 (比如是8位的补码)关于256形成的所有同余类就容易理解补码的计算。 比如 11111111 这个同余类中的元素应该是所有跟255关于256同余的,也就是 ... -513, -257, -1, 255, 511, 767, ... 所以如果这是一个无符号整数,就代表255(正数中接近0的) , 如果这是一个有符号整数,就代表-1(整个同余类中最接近0的)。 同样的, 运算溢出之类的问题也容易理解了
热心网友 时间:2023-10-16 13:26
所谓的“模”,实际上,就是数学中常说的【周期】。
16 位二进制,范围是:0~65535。
加一加一。。。到了最大,再加一,就又从零开始。
所以,16 位二进制的周期,就是 65536=2^16。
写成二进制,就是:1 后面 16 个零。
8 位二进制,共有 256 个数,周期就是 256。
-----------
负数的补码,就是: 模 + 该负数。
(求补码,可以先用十进制计算,再转换到二进制。)
[-5]补=模+(-5)=65531=1111 1111 1111 1011(二进制)。
热心网友 时间:2023-10-16 13:26
在日常生活中,可知:
时针,转一圈,周期是 12。倒拨 3 可以用正拨 9 代替。
分针,倒拨 X 分,也可以用正拨 (60-X) 代替。
就是说,负数,可以用一个正数(补数)代替。
同理: 25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,-1 ,就可以用 +99 代替,进行运算。
+99,就称为-1 的补数。
计算方法: 补数 = 周期(10^n) + 负数。
n 为位数。
计算机用二进制,补数,就称为:补码。
计算方法:负数的补码 = 模(2^n) + 负数。
n = 8 时,模 = 256,写成二进制就是:1 0000 0000。
所以,-5的八位补码就是:
1 0000 0000-101 = 1111 1011。