关于C语言中整型变量取值范围的问题

我知道C语言中整型变量在内存中分配两个字节,为什么不是2^-15到2^15
而是2^-15到2^15-1,各位帮我解释一下为什么还要减一呢

其实C语言标准并没有规定整型变量在内存中分配几个字节,根据不同的编译器是不同的,例如在visual c++6.0中就为整型变量分配4个字节的内存空间。
以两个字节为例,最大值的二进制为0111 1111 1111 1111,可以计算一下这个二进制的值,它实际上等于1000 0000 0000 0000-1,也就是2^15-1。
对于最小值呢,因为数据在内存中是以补码的方式存储的,它的最小值的二进制实际上是 1000 0000 0000 0000,可以实际判断一下,这是最小的负数,根据这个二进制数可以求出它的取反为 0111 1111 1111 1111,再加1为1000 0000 0000 0000,也就是-2^15。
不知道清楚不?
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-03
因为如果是两个字节的话,就是十六位二进制表示的。最大的十六位二进制就是十六个1,即1111 1111 1111 1111,这就是2^15-1啊。
顺便说一下,c语言中整型也不一定就是两个字节,这和你用的编译器有关系,比如我用的vc6.0中就是占四个字节。
我也在研究c语言,我有个c语言交流群,你可以家一下,是baidu hi的群。
群号是1171607,有任何问题欢迎来交流!
第2个回答  推荐于2017-11-23
虽然有16位,但最高位是符号位。最高位为1时说明是负数,为0时表示正数。
即最大的正数的而二进制数就是第一位是0后面15个1:011111111 11111111
对应的十进制数就是2^15-1,而其一为为1其余的全是0时即10000000 00000000表示最小的负数,十进制就是2^-15本回答被提问者采纳
第3个回答  2010-08-03
0也算正数范围内,所以减一,而且现在的机子中貌似int为4字节。c只是规定int不少于16位,但现在的都是32位的编译器,所以int一般为4字节了

c语言中学习整数类型的取值范围有什么用,有什么意义啊?
以变量counter为例,它被当作整数使用,且为8位整数,其取值范围为0~255。这意味着,使用此变量进行循环操作时,如果循环条件超出了这个范围,循环将永远不会结束。这种情况下,确保变量的类型与可表示范围匹配至关重要,以避免无限循环或其他潜在的程序错误。另一个例子是2038年问题,也称为千年虫问题...

关于C语言中整型变量取值范围的问题
其实C语言标准并没有规定整型变量在内存中分配几个字节,根据不同的编译器是不同的,例如在visual c++6.0中就为整型变量分配4个字节的内存空间。以两个字节为例,最大值的二进制为0111 1111 1111 1111,可以计算一下这个二进制的值,它实际上等于1000 0000 0000 0000-1,也就是2^15-1。对于最...

c程序中基本整型的取值范围:-32768~32767是怎么算出来的?
答案明确: C语言中基本整型的取值范围-32768~32767是基于计算机二进制补码表示的。详细解释:1. 计算机中的二进制补码表示法:在计算机内部,整数通常采用二进制补码形式表示。正数和零采用原码表示,而负数采用补码表示。在这种表示法中,-128到+127的范围可以精确表示。这是因为计算机使用固定数量的位来表...

为什么C语言中有符号整型变量的取值范围是-32768~32767,麻烦详细解释...
答:有符号整型变量的取值范围是-32768~32767,这是过去16位计算机的int类型整数的表示范围,因为16位二进制可表示65536个十进制数据,如果表示无符号整数则其范围为:0 到 65535,而要表示有符号的十进制数据,那么最高位就是符号位,正数的范围为:0 到 32767,其二进制数就是:0000 0000 0000 0000...

c程序中基本整型的取值范围:-32768~32767是怎么算出来的?
答案明确: C语言中基本整型的取值范围-32768~32767是基于计算机二进制补码表示的。详细解释:1. 计算机中的二进制补码表示法:在计算机内部,整数通常使用二进制补码形式表示。正数和零采用原码表示,而负数则采用补码形式表示。补码允许我们在一个固定的位数内表示正数和负数,并允许它们共享相同的数值位来...

C语言中整形的取值范围问题
正数是对的,负数错了,你写的那个等于负零。应该是:1111 1111 1111 1111到0111 1111 1111 1111

c语言中整型数据的取值范围是怎么确定的???
以8位数据为例:2进制的11111111表示-1,10000000表示-128,所以负数范围-128~-1;2进制00000000表示0,01111111表示127,所以正数范围0~127。合起来就是-128~127,找一下规律发现是- 2的(8-1)次方~2的(8-1)次方-1,那么就可以得到任何位数的范围:short 16位 - 2的(16-1)次方~...

C语言中整型的问题。
问②,“unsigned long 4字节(32位)取值范围0~(2的32次方-1)”中,为什么要2的“32”次方,而不是“31”次方呢?答: 无符号整型是没有符号位的,但也不能表示负数,因为最高位的符号位只能表示数字,这样我们在计算范围时步需要考虑符号位。但为什么是2的32资方-1而不是2的32资方呢。因...

为什么C语言中的整型取值范围是--32768~32767,是按什么规则规定,推理...
整型的宽度是一个字,也就是2个字节,16个二进制位,最高一位二进制位用来表示符号(正或负),那么剩下的15位来表示数值。01111111 11111111是32767,最大的正整数 00000000 00000001是1 00000000 00000000是0 11111111 11111111是-1(不是-32767)10000000 00000001是-32767(不是-1)10000000 00000000...

数据int的取值范围是多少
在C语言中,数据类型int用于定义整数变量,其占用内存空间为4字节(32比特),这意味着它的取值范围从负2147483648到2147483647。这个范围是由符号位和31位数值位共同决定的:符号位用来表示正负,0代表正,1代表负;剩余的31位用于存储实际数值。int类型常采用十进制书写,如123、-456和7890,且整数表达式...

相似回答