为什么C语言中short int 范围是-32768---32767 而不是 -(2^16-1)---32767?

不是可以为“1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1”(16个1)吗?第一个是不是要算入的?即“1*10^15”

因为C语言中short int占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767,它的0可以表示为二种状态,+0和-0,既浪费了存储资源,又造成了不方便(需要处理后才能判断二个整数量是否真的不相等)。所以一般采用计算机中一般都采用补码形式来表示有符号整数。多出的一个状态按补码的规则正好是-32768。

-(2^16-1)---32767总的状态数远远大于2^16种,所以不能用16位的二进制来表示的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-05
short int 是16Bit Int
是有号数
2补数取负值 (反相加1) *-1
0x0000(0) == 0xFFFF + 1 =-(0x10000) => 0
0x0001(1) == 0xFFFE + 1 =-(0xFFFF) => -(-1) => 1
0xFFFF(-1) == 0x0000 + 1 =-(0x0001) => -1
-100赋值
100 =>0x0064 =Inv=>0xFF9B
-100==>0xFF9B+1 =0xFF9C ==>65436
第2个回答  2011-10-05
首位是要代表正负的 所以。。。。。32767=2^16-1
第3个回答  2011-10-05
第一个是符号位,正数是0负数是1.追问

请问,如果将-100赋值给一个无符号的变量,会得到一个什么样的数?是怎么得到的?
-100在内存中占多少bit?

本回答被提问者采纳

为什么int是从-32768到32767而不是从-32767到32767呢?
明确答案:这是因为计算机采用二进制表示整数,而int类型的范围是由其位数决定的。对于标准的16位有符号整数,其范围就是从-32768到32767。这个范围的设定是基于二进制数的表示方法以及其位数的限制。详细解释:1. 二进制数的特性:计算机内部所有的信息都是以二进制的形式进行存储和处理的。在二进制中,...

为什么int是从-32768到32767而不是从-32767到32767呢?
计算机是用2进制表示的所以int是从-32768到32767而不是从-32767到32767

C语言中short整型数据的范围-32768---32767是中的-32768是如何确定的...
在C语言中,short整型数据使用2个字节来存储信息,即16位二进制。这意味着它可以表示从最低位到最高位的从-32,768到32,767的整数值。这种范围的确定基于二进制位的性质,以及在计算中如何利用这些位来表示正负数。每个二进制位仅能表示两种可能,即0或1。这形成了一个基础,使我们能够通过组合这些位...

为什么int是从-32768到32767而不是从-32767到32767呢?
-32768的对应相反数是32768,它的二进制是1000000000000000,反码(按位取反)后是0111111111111111,再+1后变成1000000000000000。-32767的对应相反数是32767,它的二进制是0111111111111111,反码(按位取反)后是1000000000000000,再+1后变成1000000000000001。...-1的对应相反数是1,,它的二进制是000000000000...

为什么int是从-32768到32767而不是从-32767到32767呢?
-32768的对应相反数是32768,它的二进制是1000000000000000,反码(按位取反)后是0111111111111111,再+1后变成1000000000000000。-32767的对应相反数是32767,它的二进制是0111111111111111,反码(按位取反)后是1000000000000000,再+1后变成1000000000000001。...-1的对应相反数是1,,它的二进制是...

为什么整型变量的取值范围是-32768到32767而不是-32767到32767那么-3...
整型变量取值范围为-32768到32767,而非-32767至32767,原因在于硬件技术的限制。以-32768为例,它在十六进制下表示为8000,转换为二进制为1000000000000000。此数值采用的是32位表示法,最高位作为符号位,用于指示正负。现今计算机内部运算采用32位计算,故-32767除非特定条件下,否则不会直接出现,因为它会...

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

c程序中基本整型的取值范围:-32768~32767是怎么算出来的?
2. 关于int的取值范围:-32768到32767的范围是基于计算机中int类型的常见定义。通常情况下,int类型使用32位来存储数据。其中一位用作符号位,剩下的用于存储实际数值。在这种配置下,可以表示从-2^31到2^31-1的范围。对于大多数系统而言,-32768代表负的最大数在这个范围内能够精确表示的数,-32768...

int 形的整数的取值范围为什么是-32768-32767而不是-32767-32767
对于有符号的整数,用补码表示的话,比如说8位(即char,BYTE类型的),最高位是符号位,下面7位用来表示数据.那么,表示正数的话,表示的范围为00000001-01111111,也就是说,8位表示正数,最高只能是127,最高是符号位嘛,是不能用的.表示0:00000000 下面表示负数,相信你应该知道表示的方法,即补码是原码取反...

C语言int 取最小值为什么是-32768而不能是-32769
正数最大值是32767,负数最小值是-32768 从 0到 32767,用二进制是从:00000000到01111111 ① 从-1到-32768,用二进制是从:11111111到10000000 ② 注意到:①和②里对应的数相加是:11111111.

相似回答