c语言中补码怎么算的

如题所述


首先建议楼主去恶补一下“原码”、“反码”以及“补码”的相关知识。

以下我就先来分析一下(假设你已经了解了这些知识):

首先我们以无符号的视点来看待题目中的数据:

n = 0x7FFF
m = 0x8000

可知对于n来说,他的二进制模式为:0111 1111 1111 1111
对于m来说,他的二进制模式为: 1000 0000 0000 0000
可以看到,最高位符号位n为0,而m为1
所以用带符号数的视角来看待m、n的这串二进制数据,我们知道n符号位(最高位)为零,所以n是正数,而m符号位为1,因而是负数。

对于补码,正数好计算,就是他的值,也就是0111 1111 1111 1111 = 0x7FFF = 32767

对于负数m,为了知道他的值我们可以这么干:
假设m的绝对值|m| = x,则我们对m就可以得到x
m = 1000 0000 0000 0000
取反:
~m = 0111 1111 1111 1111
加1
~m + 1 = 1000 0000 0000 0000
(这道题数据比较特殊,所以你看到m和~m+1结果貌似一样,事实上你可以列举其他值算算,一般这两个位模式是不同的)
可知x = 32768
则可知m = -x = -32768

以上
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-05
具体怎么样的你可以在任何一本c语言书上看到,我讲再清楚都没用。
我给你讲讲自己的理解。 把所有的数字看成时钟上面的数字。
00000000---00000001--00000002.。。。。。一直到FFFFFFFF
FFFFFFFF是-1
我说的是32位有符号数int 用这个时钟概念去理解补码的,我保证你永远不会忘的。
否则光记得 补码=反码+1 反码=原码和FFFFFFFF取异或,这样你在面试的时候迟早要蒙的。
希望对你有帮助。
第2个回答  2011-06-05
正数补码=它的2进制。
如5的补码=原码:101;
即0000,0000,0000,1001
负数补码=负数的绝对值的2进制再取反+1;
如-5:
~0000,0000,0000,1001+1
=1111,1111,1111,0110+1
=1111,1111,1111,0111
第3个回答  2011-06-05
C语言里面,不涉及补码。
补码是汇编语言中,表示带符号数的。
C语言是高级语言,可以按照人类语言的写法,直接使用正负号,并不需要使用补码。
第4个回答  2011-06-05
正数和0的补码永远都是自己,负数的补码就是它的绝对值按位取反,加1。
[0]补=00000000b
[1]补=00000001b
[2]补=00000010b
[3]补=00000011b
----------------
[-0]补=00000000b
[-1]补=11111111b(注:-1的绝对值为1,按位取反后为11111110b,加1就得到了-1的补码:11111111b)
[-2]补=11111110b
[-3]补=11111101b

c语言中补码怎么算的
C语言中,所有的整型数据实际存储的都是补码。要计算补码,先要知道原码的概念,原码也就是一个10进制数的二进制表达方式,比如100的原码为1100100。补码的计算原则为:1、 对于无符号数以及有符号数中的正数,其补码就是原码本身;2、 对于有符号数中的负数,其补码为真值绝对值的反码加一,其中反码为...

c补码的代码写法
c语言补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)。[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码) [-1] = [10000001](原码) = [11111110](反码) = [11111111](补码...

c语言中原码,补码分别是什么意思
原码:正数末尾取0,负数尾数为1;补码:正数=原码,负数为反码(除符号位)+1 比如 12 -12 原码 0001100 1001100反码 0001100 1110011补码 0001100 1110110

C语言的补码是怎样求出来的?
所以-19的原码是10010011,反码是11101100,补码是11101101

请C语言大虾,帮我讲解补码怎么理解!!
负数的补码是在其反码的末位加1。41 = 32+8+1,因为是正数,所以最高位为0,这样得出来的是原码。反码呢,按照规则,也是这么多,好理解吧!补码就稍微麻烦点,如果原数是一个正数,则补码和原码相同,如果原数是一个负数,则结果是其反码的最后一位加1.相信你应该懂了! 希望可以帮到你!

在C语言中补码什么意思?
补码是负整数的一种编码规则,比如8位二进制表示的-1为11111111。本规则遵循的原则很简单,就是加一个与它对应的正整数后,通过自动进位丢弃进位位后的结果是0,比如11111111+1=1 00000000,其中进位1被丢弃,结果是0。补码规则中的正数的补码是自身,这样计算机中的整数就都是用补码表示的了。求补码...

在C语言中说补码运算是可交换和可结合的,它具体指的是什么意思?
正数的补码是它本身 比如1,2,3, 补码也是1,2,3, 交换律就是1+2+3 = 2+1+3 结合就是1+2+3 = 1+(2+3) 这是正数的 显而易见 但对于负数来说 他的数值就跟本身不一样的 但是也是满足这个规律的 , 也就是说-1 ,-2,-3,的补码在交换律和结合律后, 得出的...

在计算机C语言中,求补码口诀为“求反加一”是怎么回事?
对二进制数取反,即0变1,1变0;取反后再加上1,就能求出补码。比如十进制数10的二进制原码是1010,要求它的补码,就是先对其取反,变成0101,再加1,满二进位,变成0110,就是它的补码表示形式。

C语言中,补码包括符号位么?
不包括。先把负数取绝对值,取二进制数加1在取反哦

C语言中原码,反码,补码是怎么算的啊?
补码=反码+1 网页链接 网页链接

相似回答