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这个概念

c中1000000000000000,一后面十五个零,为何表示的是负32768,而不是...
再加1 1000000000000000 也就是2的15次方,即32768 所以这个补码的10进制数就是负32768

C语言中关于-32768在内存中存储的问题
-32768在内存中存储1000000000000000(15个0) 这是正确的。因为计算机中数字的存放都是用补码的形式在存放。至于你说它的原码溢出,如果变换成原码那原码就溢出,但是计算机内的运算都是用补码,所以不存在换算成原码的问题,所以这个问题在计算机中并不存在。

C语言问题
-0的符号位为1,应该表示负数更为合理,所以就规定,表示-32768,这是规定!!!

C语言的int 为什么最小值是-32768
2 原因 两个字节是16位,规定第一位为符号位,则其能表示的数值范围是-2^15~2^15-1,即-32768~32767。但最小值为什么是-32768,为什么不是-32767呢?原来人们发现若是在内存中直接存放数的原码,则0000 0000 0000 0000和1000 0000 0000 0000分别表示+0和-0,其值都是0,用两个值表示同一个...

为什么C语言中的整型取值范围是--32768~32767,是按什么规则规定,推理...
00000000是-32768(不是-0),最小的负整数 计算机表示数主要从运算方式的一致性来考虑。比如00000000 00000001表示1很好理解,但是11111111 11111111为什么是-1呢?按照二进制加法 11111111 11111111 + 00000000 00000001= 1 00000000 00000000 结果超出了整型的宽度,溢出部分被忽略,最后的计算机结果是00000000...

C语言中short整型数据的范围“-32768——32767”中的“-32768”是如何...
0000 0000 0000 ,但是在计算机中负数是用补码(符号位不变,其余位取反,然后加1)表示的,人们规定1000 0000 0000 0000的补码为-32768 ,所以在补码系统中最小的是-32768 表示正数时,最高位为符号位(正数的符号位为0),最大的正数为0111 1111 1111 1111 即2^15 - 1 = 32767 ...

一道C语言问题 会的人麻烦解释一下
这个要从数据在计算机中的存储方式说起。计算机中是以2进制补码形式存储数据的。8位的机器中int型占2个字节,可存储的int范围为-32768~32767 。你的k=32768,存储到计算机中就是0x10000000 00000000(注意:最高位为符号位),这和-32768在计算机中存储的数据是一样的。所以输出的时候就会显示-32768 ...

c语言里-32768的补码怎么求
负数的补码计算步骤:-32768 1。负数 符号位置1 2。绝对值32768 二进制 1000 0000 0000 0000 3。取反 二进制 0111 1111 1111 1111 4。加一 二进制 1000 0000 0000 0000 -32768比较特殊 最高位占用了符号位,神奇的是并不影响计算结果

-32768的二进制补码是多少?
-32768的二进制补码为1000000000000000,同时也可以为11000000000000000,因为补码1000000000000000和11000000000000000是相等的。(1000000000000000)二是补码,最高位1,表示是负数,转换成对应原码是用下面的方法:1,原码转换成补码时:把原码的反码再加1,就是补码。2,补码转换成原码时:把补码的反码再加1,就...

C语言基础的几个难点解析
对于有符号位的短整型(signed short int,默认的),最左面一位作为符号位,0表示正,1表示负。即能存储的最大数为0111111111111111,第一位是0,表示正数,后边15位都是1,转换为十进制为32767;最小数为1000000000000000,转换为十进制为-32768。超出此范围,即为“溢出”。例如:short int a,b,c...

相似回答