c中1000000000000000,一后面十五个零,为何表示的是负32768,而不是负0

c中1000000000000000,一后面十五个零,为何表示的是负32768,而不是负0

你这个二进制串是补码,在计算机中的数是用补码进行表示的
补码与原码的转换是正数的补码与原码相同
负数的补码等于原码按位取反再加1

这个1000000000000000就的原码就是
先取反0111111111111111
再加1 1000000000000000 也就是2的15次方,即32768
所以这个补码的10进制数就是负32768
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-10
你可以这样理解,当符号位是1时,补码的转换要反转各位再加1(不算符号位),所以-32768就是15个0反转成15个1,再加1,这时正好变成10000(15个0),也就是负的(这个负的是因为原来的符号位是1确定的)2^15。
第2个回答  2010-01-20
这个很简单,16位表示的范围是-32768~32767,因为c中没有正零和负零之分,而1000000000000000和000000000000000都是表示0,所以默认让1000000000000000表示-32768
第3个回答  2010-01-20
补码表示法表示就是这个值。
第4个回答  2010-01-20
补码就是这样的
另外,c/c++不存在负0这个概念

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网