您的位置:

c语言int值域,c语言中的int的范围

本文目录一览:

求c语言中各个语句如int,float,scanf的用法和区别?

int为整形变量占2个字节,共16位,值域为-32768~32767

char为字符型变量例如'a','b'等,存储时是存储的ascii码,ascii码是8位,所以char只需一个字节

例如'a'为01100001,一个字节就可以存8位

float为单精度实型,占4字节,可放32位二进制数,而且可以是小数,值域为-3.4e+38~3.4e+38

所说的变量其实只是一段内存空间,例如定义了int

a;则开辟了2个字节的内存空间,char

a;则开辟1个字节内存空间,float

a;则开辟4个字节内存空间。

printf函数是把变量的值输出在屏幕上;

scanf函数是从键盘上输入的值赋给变量。

c语言有符号int取值范围

结论,取值范围是-2^31~2^31-1(十六进制为0x80000000~0x7fffffff)。因为0既不是正数也不是负数,+0是0,-0是最小的负数(-最大正数-1),所以负数的取值范围比正数多一个数。

int为四个字节,一共32位,其中最高位为符号位,0表示正数,1表示负数,剩下的31位表示数。所以一共可表示2*2^31即2^32个数字(包括一个0)。

在计算机中保存有符号数,保存的是数的二进制的补码,正数的源码、反码、补码相同,负数的反码为源码除符号位之外其余位取反,补码为反码+1(符号位不参与这个运算)。

在计算机中,正数为常量,且源码和补码相同,所以存储正数直接存就行。而负数因为有一个负号-,所以负数是一个计算表达式,都是由负数的绝对值计算出该负数的补码后存储在计算机中的。

求负数的补码值的时候,如-5,首先确定其符号位是1,后面写出其绝对值的二进制形式,28个0后面跟101,反码为29个1后面跟010,再加1就是补码29个1后面跟011,那么-5在计算机中就是存为29个1后面跟011。

所以可知0是32个0,最大正整数为0后面31个1,即2^31-1(2^31个数里包含了0,所以正数的个数要减去一个)。按理说正负数应该是对称的,最小的负数应该是-最大正整数,即-(2^31-1),为什么实际上最小的负数为  -最大正整数-1?为什么-0是最小的负数?

注意,虽然  -最大正整数-1  就是 -(2^31-1)-1 = -2^31,但是写的时候不能写 int i = -2^31;因为说了负数其实是一个计算表达式,实际上是先对正数取反然后加1,符号位置为1,但是正数最大值是2^31-1,所以写-2^31是溢出的,这涉及到另外一个知识点。

先解释为什么-0是最小的负数(负的最大正整数-1)。

负的最大正整数的源码:32个1。反码:1后面跟31个0。补码:左右各1个1,中间30个0。所以,负的最大正整数(-(2^31-1))在计算机中存储为:1三十个零1。负的最大正整数-1就是负的最大正整数加-1。-1的补码为:32个1(十六进制为0xffffffff),那么两个补码相加:1三十个零1 + 32个1 = 1三十一个零。所以  负的最大正整数减一  的补码为:1三十一个零(十六进制为0x80000000),那么可以推断出其反码是32个1,则源码是1三十一个零,即-0,所以-0就是  负的最大正整数减一  ,-0的源码和补码相同。

那么为什么最小的负数是  负的最大正整数-1,为什么不能是负的最大正整数-2,或者减3......,因为通过计算,负的最大正整数的补码+负二的补码=0后面跟三十一个1,变成了最大的正整数。显然是不对的,同一个补码只能表达一种含义,减3同理,所以就规定最小的负数为负的最大正整数-1。

为什么在 c语言中,int 有个范围,这个范围怎么计算的?

int型取值范围为-32768~32767是针对int型占2个字节来说的。

下面具体说明该范围的求法:

int型占2个字节,共16位。

int型能表示的最大正数为(最高位为符号位,正数的符号位为0):0111

1111

1111

1111

也即2^15-1=32767

int型能表示的最小负数为(最高位为符号位,负数的符号位为1):1000

0000

0000

0000(补码),而在计算机中负数是利用补码进行存储的,所以将1000

0000

0000

0000转换为源码就是1000

0000

0000

0000,也即-2^15=32768

所以int型取值范围为-32768~32767

为什么C语言里有的数据类型的值域会不同?

不同数据类型

占的字节数不同

导致值域不同,比如

char

占一字节,long占4字节,自然不可能一样

还有一种

是数据类型表示数据的方式不同,

比如int是用来表示整型的,而float是用来表示浮点型的,虽然都是4字节,但表示范围肯定不一样的。

C语言的int类型变量范围是多少?

变量范围是-32,768 to 32,767 或者 -2,147,483,648

测试int变量的字节数:

#include stdio.h#include limits.hint main() {   printf("Storage size for int : %d \n", sizeof(int));   return 0;}

结果:Storage size for int : 4

说明int型变量占用4个字节。

printf("int类型的最大值:%d\n",INT_MAX); printf("int类型的最小值:%d\n",IN。

c语言中int取值范围为16位指的是什么16位

1.c语言中int取值范围为16位指的是什么16位

计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ 、1代表-。

2.当中16位与-32768~+32767又有什么关系?

这里的-32768~+32767是指用16位来储存一个int值的取值范围。int是integer(整数)的缩写,int类型的值必须是整数,可以是正整数,负整数或0。

3.是不是16位指的就是32767用二进制表示时有16位数字

不是,16位表示32767是0111 1111 1111 1111,而0000 0000 0000 0000 0111 1111 1111 1111也表示32767,它有32位。

扩展:关于为什么16位int值的取值范围是-32768~+32767。

二进制转化为十进制,从右往左数,第一位代表2的0次方,第二位是2的1次方,以此类推,用每一位上的数乘以对应位的值再相加即可得到对应的数值。比如1011就等于1*(2^0)+1*(2^1)+0*(2^2)+1*(2^3)=1+2+0+8=11。

那么计算机表示的16位正数范围就是从0000 0000 0000 0001到0111 1111 1111 1111。(注意:计算机表示时最左边是符号位。)

也就是正的1*(2^0)到1*(2^0)+1*(2^1)+1*(2^2)+……+1*(2^14)=(2^15)-1

也就是+1~+32767。

负数范围要了解计算机内部表示负数的方法,“2的补码”,具体方法分两步:

第一步,每一个二进制位都取相反值,0变成1,1变成0。

第二步,将上一步得到的值加1。

比如要表示16位的-1,就把+1也就是0000 0000 0000 0001取反变为1111 1111 1111 1110,再+1,也就是1111 1111 1111 1111表示-1。

那么要知道计算机表示的一个负数的绝对值就要把这个负数按照上面所说的“2的补码”规则反处理。所以16位能表示的最小负数,也就是符号位为1,其余全部为0,即1000 0000 0000 0000。

(这里比较难理解为什么确定符号为1,后面要全部取0,主要是为了经过反处理后得到一个尽量大的数值,也就是最左边位置2^15位上的值为1,这样才能得到最小的负数。)

第一步,1000 0000 0000 0000(处理时,这是一个二进制数值,1不再是符号) 减去1得到 0111 1111 1111 1111。

第二步,取反,变为1000 0000 0000 0000,即1*2^15。

综上,16位int取值范围是1000 0000 0000 0000到0111 1111 1111 1111即-2^15~(2^15)-1,-32768~+32767。