您当前的位置:首页 > 互联网教程

C语言中二进制求补码过程中取反后再加1,那个1是怎么加的

发布时间:2025-05-13 11:28:22    发布人:远客网络

C语言中二进制求补码过程中取反后再加1,那个1是怎么加的

一、C语言中二进制求补码过程中取反后再加1,那个1是怎么加的

二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:\x0d\x0a求-7的补码。\x0d\x0a因为给定数是负数,则符号位为“1”。\x0d\x0a后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001加在末尾了),所以-7的补码是11111001。\x0d\x0a\x0d\x0a如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。

二、c语言中补码怎么算的

C语言中,所有的整型数据实际存储的都是补码。要计算补码,先要知道原码的概念,原码也就是一个10进制数的二进制表达方式,比如100的原码为1100100。

1、对于无符号数以及有符号数中的正数,其补码就是原码本身;

2、对于有符号数中的负数,其补码为真值绝对值的反码加一,其中反码为原码按位取反。

三、C语言原码补码问题

1、你的这个是16的,我可以给你用8位解释一下(原理是一样的,我打起来比较方便~)

2、我们知道,8位二进制的补码表示范围是-128~127对吧。

3、而在计算机中数据都是以二进制补码进行存储的,那么-128的存储方式就是1000 0000,而它是没有原码和反码的,所以你不太能验证,对吧。

4、这是因为在计算机中,为了溢出特意定义的一个小玩意儿~

5、所以放到16来解释,它的最小值也是-32768。

6、但这已经是最小的数了,再减就会溢出……(理论上是这样的)

7、但是现实中的程序编译有一定的容错性,只要到了一定的计算机承认的位数就变成-1了。

8、这是因为计算机中的数好像一个轮回……

9、这个是我的计算机能接受的范围。

10、如果你的程序要求指定了16位,那么就是-1,如果高于16位,就是-32769。