【发布时间】:2018-03-16 04:56:47
【问题描述】:
我有 8 位 int zero = 0b00000000; 和 8 位 int one = 0b00000001;
根据二进制算术规则,
0 - 1 = 1(从下一个有效位借用 1)。
如果我有:
int s = zero - one;
s = -1;
-1 = 0b1111111;
所有1s 来自哪里?没有什么可以借用的,因为zero 变量中的所有位都是0。
【问题讨论】:
-
整数算术环绕零。 0 - 1 == -1,全为 1。
-
它称为二补二进制表示。 -1 全为 1,最大的负值是最高有效位(符号位)中的 1,其他所有位置为零。 en.wikipedia.org/wiki/Two%27s_complement
-
1 是从
0中的第一个1借来的...即从无穷大... -
你的意思是-1 = 0b100000000?
-
s的值漏掉了一点。
标签: c math binary twos-complement integer-arithmetic