C语言中关于负数补码的问题。

比如:-7的原码是10000111,对吧
那他的反码是11111000,补码是11111001,那它在电脑是存补码11110001这个对吧,那电脑里存的一个数10000111(即-7原码)不也表示-7吗?
问题重写:短整型数据-7,原码是1000 0000 0000 0111,反码是1111 1111 1111 1000,补码是1111 1111 1111 1001,那就是说1111 1111 1111 1001这个数代表-7,那请问电脑里1000 0000 0000 0111代表什么数呢?另外我上面对-7原码反码补码的理解是不是正确呢?

您好:
您的理解是对的,另外,计算机CPU运算和在内存中的存储都是以补码形式进行的,不论您的软件代码是什么运算和什么变量,通过编译器编译运行后都自动转换为补码进行,这是机器自动完成的不需人为干预。

希望能帮到您,满意请采纳。追问

请问1000 0000 0000 0111和1111 1111 1111 1001都代表-7对吗?

追答

是,一个是原码一个是补码
具体应该是整数(int型)-7的32位原码和补码。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-23
注意符号位
比如说电脑存的是1开头的数 它就会认为这个数是补码 然后把1后面的数按补码、反码的法则在返回去就得到它真正的数了
那你举得例子讲;
比如:-7的原码是10000111,对吧
那他的反码是11111000,补码是11111001,那它在电脑是存补码11110001这个对吧,那电脑里存的一个数10000111(即-7原码)【【【【【电脑会吧0000111按补码、反码法则返回】】】本回答被网友采纳
第2个回答  2014-01-23
你应该知道“整数都是以补码形式存储和运算的”。另,即使是原码-7是10000111,补码-7是11110001这又有什么不妥吗?哪个是补码,哪个是原码,计算机存储时是很清楚的!你-7的反码正确。
第3个回答  2014-01-23
原码和补码是相对的 任何一个数都可以说是一个原码,例如7的被补码是-7,而-7的补码是7

负数是用其对应的正数的补码表示,为什么这么表示看下面的计算就知道了
-7 = 0 - 7 也就是 00000000 - 00000111 = 11111001

借位 1 00000000
- 00000111
-----------------------------
11111001追问

你这个算法为什么能从最前面凭空再借个1出来啊?

第4个回答  2014-01-23
因为现在的厂商都出的是补码机,历史上曾经也出现过一些反码机,但现在都采用补码表示了
负数都会被转为补码表示,当然了,正数的补码是原码
x=~x+1
相似回答