因此,根据我的理解,到目前为止,0和1用作数字中的加号或减号。如果我有一个二进制数10101(十进制数为21)的数字,这怎么转换为负数?它变成10101 + 00001 = 10111吗?或者它被添加到前面?
同样在尝试理解它的时候,如果你试图获得一个数字,比如九位二的补码怎么办?用9位写这个是000010101 21,然后在前面加一个?
我来回走动,但我不理解。
答案 0 :(得分:0)
要反转二进制补码的符号,可以反转其位并加一。比特数并不重要。 "添加一个"意味着字面上执行添加,不是在数字上附加1或者用1交换0。
因此对于数字21有九位:
21 = 000010101;
inverted = 111101010;
plus 1 = 111101011;
22位有9位:
22 = 000010110;
inverted = 111101001;
plus 1 = 111101010;
答案 1 :(得分:0)
我总是将两个补码描绘成里程表。如果(4digit)里程表在0000并且你向后跑了一公里,那么里程表将显示9999.所以9999向后重复1公里,或者-1公里。
如果你给这个数字增加1公里,你得到10000.但由于你只有四位数,你最终得到0000.所以-1km + 1km确实会导致0km。
你需要一种方法来区分9999是9999公里前锋还是1公里后退。这仅仅是一个惯例问题。你可以说从5或更高开始的所有东西都被认为是负距离。计算无关紧要,因为9999 + 0001 = 0000,无论9999来自9999公里前锋还是1公里后退。但是,当你想将9999显示为-1km时,它确实很重要。
这两个补码与二进制数的想法相同。