c语言中int变量范围为什么是—32768至32767 就是正数的最大是2的15次方减一,想请教为什么要减一呢?

作者&投稿:芝林 (若有异议请与网页底部的电邮联系)
为什么C语言中有符号整型变量的取值范围是-32768~32767,麻烦详细解释一下?~

答:有符号整型变量的取值范围是-32768~32767,这是过去16位计算机的int类型整数的表示范围,因为16位二进制可表示65536个十进制数据,如果表示无符号整数则其范围为:0 到 65535,而要表示有符号的十进制数据,那么最高位就是符号位,正数的范围为:0 到 32767,其二进制数就是:0000 0000 0000 0000 到 0111 1111 1111 1111;负数的范围为:-1 到 -32768,其二进制数就是:1111 1111 1111 1111 到 1000 0000 0000 0000 ,两者所表示数据的个数恰好是65536个十进制数据。

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

你说的这个int是两个字节的,每个字节8位,由于第1位要用来表示符号位所以正的最大值是
0 1111111 11111111 总共15个1,
而2的15次方是
1 0000000 00000000
2的15次方减一刚好是 0111111111111111,就是 32767

在机器中 有符号最大数为0111111111111111 就是2的15次方减1
再加1 符号位变为1 就成负数了

这是由于语言定义整数存储位数决定的。

0111111111111111 这是int型最大的正数。。。把这个数再加一就是2的15次方了。所以要减一。


integer与int有什么不同
int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别:int 是基本类型,直接存数值 integer是对象,用一个引用指向这个对象 1、Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类);因此在类进行初始化时int类的变量初始为0.而Integer的变量...

泛型和范型的区别是什么?
a,首先检查是否转换回的类型是装包的类型,如果不是抛出一个InvalidCastException运行时错误.b,复制Object类型中的值到目标值类型变量;例如:int i = 1;object o = (object) i; \/\/boxing int j = (int)o \/\/unboxing \/\/double d = (double)o ,出现运行时错误 通过上面的可以看到在.NET ...

C语言中怎么处理溢出
Small operands: safe. *\/ result = multiply( 49, -972 );if( errno == ERANGE )perror( "Uh oh" );else printf( "%d\\n", result );} 当然,应付溢出的最佳方法还是防范:充分了解数据的范围,选择恰当的变量类型。也许你正考虑改用不需要你担心整数类型溢出的语言。考虑过 Python 吗?

int与Integer的区别
int 是基本数据类型 Integer是其包装类,注意是一个类。为什么要提供包装类呢???一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。比如,现在int要转为String int a=0;String result=Integer.toString(a);在java中包装类,比较多的用途是用在于各种数据类型的转化中。我...

请教关于java的泛型方法
当某个类型变量在方法的参数列表和返回值中被 多次利用了,且返回值不为空,在调用方法时这多处的实际类型又对应不同的类型,那么优先考虑返回值的类型.int x = add(3,3.5f) --> static <T> T add(T a,T b)参数类型的类型推断具有传递性,copy(new Integer[5],new String[5]) --> ...

string的C++ 中
string类的字符操作:const char &operator[](int n)const; const char &at(int n)const; char &operator[](int n); char &at(int n);operator[...用string::iterator或string::const_iterator声明迭代器变量,const_iterator不允许改变迭代的内容。常用迭代器函数有:const_iterator begin()const; iterator ...

QBASIC语言 谁能给我讲讲课?我不懂!
算术函数, 指调用函数后返回一个数值,本节主要介绍取整函数与随机函数。取整函数 随机函数 1. 取整函数 函数格式:INT(X)功能:产生一个不大于X的最大整数。其中,X可以是常数、变量或表达式。使用取整函数可以解决很多数学问题。(1)取一个数的整数部分 例如:X=5.3: Y=5.5: Z=-6.1 X=INT...

如果intx=11,表达式( x++*1\/3)的值是多少?
设有int x=11,则表达式(x++*1\/3)的值是4。解题过程如下:x++是运算在加,例如在这里x还是11。++x是先加在运算,我们把表达式改为(++x*1\/3)那么bai案就是4。它会首先加1x=x+1,这里x是12。再运算:(x*1\/3)=4。

C语言中一维数组的最长维数是多少?谢谢!
ANSI C89标准中规定,一个数组的尺寸(下标)必须是一个整型常量表达式以便于在编译时计算大小,而这里的所谓常量(或者常量表达式的运算结果),一般是指unsigned int。16位编译器(比如Turbo C)中,unsigned int为16位,因此数组最多32767个数据。32位编译器(比如Visual C++ 6.0)中,unsigned int为...

int32位全一是什么值,全一再加一呢?
这是因为在计算机中,整数的表示是以补码形式进行的。在int32位的补码表示中,最高位为符号位,0表示正数,1表示负数。当int32位全一时,即所有位都为1,它表示的是最大的正数。当再加一时,最低位的1进位,而最高位的1由于溢出而被截断,导致符号位变为1,表示负数。因此,int32位全一再加一...

兴庆区18742779033: c语言为啥int型输出为啥是3?? -
督弦米丽: 1/2是整型除法,结果为0.3.5+0得3.5,是一个double型的常量.将一个double型的数值赋给int型的变量a,发生隐式类型转换,double型的3.5向下截断变为int类型的3.

兴庆区18742779033: c语言:int的范围为什么是 - 2的31次方到2的31次方 - 1 -
督弦米丽: int 是有符号整型,在C语言学习中一般认为int为32位,最高位为符号位:如果数大于0,则最高位为0,如果数小于0,则最高位为1.在判断数值范围时,不用考虑负数采用补码形式存储,因为补码和原码是一一对应的.当最高位是1,即为负数,后面最多还有31个1,而这31个1的加权值之和为2^31-1,而负数最高位也为1,该位在再次进位时仍满足负数的条件,即可将最高位看成数值位,故最小值为-2^32,最大值整数最高位必须一值为1,且原码等于补码,这就限制了整数的最大值31位的1相加,之和为2^31-1.

兴庆区18742779033: C语言中.int 取值范围 -
督弦米丽: 首先声明:数学学得不好.所以不明白2的15次方是怎么来的,之后又为什么要减1.详解这个计算过程.谢谢!! int型占2个字节 即为16位 00000000 00000000 int 型是有符号型最大的整数是 01111111 11111111=10000000 00000000-1 转换成10进制``即为2^15-1 因为1后面有15个0``最小的数10000000 00000000 -2……16

兴庆区18742779033: c语言中int型的数超出范围会是怎样的 -
督弦米丽: C语言int占4个字节,一共32位,范围是-2147483648 ~ 2147483647.如果超出这个范围,就会加上或减去4294967296,使得值还落在这个范围内. 比如定义int变量a的值为2147483647,再加1就是2147483648,超出范围,因此需要减掉4294967296,最后打印的值就是-2147483648

兴庆区18742779033: 为什么在 c语言中,int 有个范围,这个范围怎么计算的? -
督弦米丽: 首先,不同16位、32位位中,int型的数据大小(其所占的字节)是不同的,分别是2,4个字节,即分别占16位,32位.所以,32位和64位机上应该是不同的.以32位的为例,其最大值是2的31次方-1,最小值是负的2^31次方.其它的计算方法一样.

兴庆区18742779033: C语言中定义int变量,默认值是多少 -
督弦米丽: 如果是定义的全局变量或者静态变量,未初始化的话就是0.如果是局部变量,那就是以前残留在堆栈里的随机值. 区分变量的类型,有两种情况. 1、局部变量. 局部变量在没有显式初始化时,其值C语言规范没做要求,可以是随机值,也可以...

兴庆区18742779033: C 语言的 int 类型变量范围是多少? -
督弦米丽: 如果int 是两个字节,范围是 -2的15次方 到2的15次方减1,如果是4个字节,范围是-2的31次方到2的31次方减1

兴庆区18742779033: c语言整数变量类型的取值范围是什么意思?像short int的取值范围是 - 32768〜32767, -
督弦米丽: 取值范围和编译器有关 没记错的话最早的Turbo C里int才是-32768~32767的取值范围,现在因为机器牛x了一次能处理的位数就增多了使得原来的int变成了现在的short int 扯远了..下面说明这个范围是怎么来的 既然讨论计算机 就不能不提二进...

兴庆区18742779033: 为什么C语言中有符号整型变量的取值范围是 - 32768~32767,麻烦详细解释一下?
督弦米丽: 有符号整形变量int型的,在c语言里面规定是用两个字节也就是16个二进制位来表示的.最高为用来表示正负,后面还有15位数,于是一共可以表示2的15次方个数字,也就是32768个,但是呢,数字0是用的16个二进制0表示的,所以正数只能到32767了,负数则是到-32768.这两个数字就是这么来的

兴庆区18742779033: C语言中:int 型的范围问题求解 -
督弦米丽: 1. int是有符号的,最高位用来作符号位,所以只剩下15或31位来表示数值了 2. 为什么要-1,因为有2的15次方个负数,1个0,2的15次方-1个正数.总共是2的32次方个数字.

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