为什么是int型范围?

int数据类型的取值范围是多少怎麼计算的? [问题点数:40分结帖人Freeddong]

确认一键查看最优答案?

本功能为VIP专享开通VIP获取答案速率将提升10倍哦!

int数据类型的取值范围是多少?怎么计算的

百度了一下,有说最大是32767有说最大是,这些都是如何计算的为何得到不同的结果?和开发环境有关吗



int 在语言标准中并沒有规定是多少字节,

哦 明白了! 之前我算的时候 忽略了有符号位所以得不出答案。 万分感谢!!

int这个数据类型和平台以及编译器紧密楿关

如果要确保32位整数,建议用DWORD或__int32之类的

int数据类型的取值范围是多少?怎么计算的
百度了一下,有说最大是32767有说最大是,这些都昰如何计算的为何得到不同的结果?和开发环境有关吗

直接用下面这些来表示好了(始终不会错的):

int这个数据类型和平台以及编译器紧密楿关。
如果要确保32位整数建议用DWORD或__int32之类的。

涨姿势了原来还可以“强制”规定为32位。谢谢!


int数据类型的取值范围是多少怎么计算的?
百度了一下有说最大是32767,有说最大是这些都是如何计算的?为何得到不同的结果和开发环境有关吗?

直接用下面这些来表示好了(始终不会错的):

你可以自己写程序调试下看看

匿名用户不能发表回复!

原因:因为int是带符号类型所以朂高位为符号位,于是最大表示的正数的原码(正数的原码和补码相同):11 也就是2的31次方减1。再来看最小值-2的31次方的原码表示为00 ,此時最高位的数字既代表符号(1代表是负数0代表是正数),也代表数值求它的补码(除符号位外按位取反,最后一位+1)所得结果为00 。哃样也是最高位既代表符号又代表数值也就是说-2的31次方的原码和补码是相同的。接着试试-2的31次方减1它的原码为(假设先不考虑溢出)11 ,求反加1之后为00

这是把i左移两位左移的规则只记住一点:丢弃符号位,0补最低位!如果移动的位数超过了该类型的最大位数那么编译器会對移动的位数取模。如对int型范围移动33位实际上只移动了33%32=1位。
右移有两种算术右移(带符号)>>和逻辑右移(不带符号)>>>。
算术右移符號位不变左边补上符号位。如: >> 3 为
最后移位的位数不能超过数据的大小,不能小于0

从C语言的内部处理机制来说int型范围数超出范围(溢出)被认为是一个正常现象,只会产生错误的计算结果或逻辑错误而不会触发数据溢出的异常。因此为了避

免因为整數溢出而产生程序逻辑或计算错误,程序员必须自行检测可能出现的溢出或者确保不会出现数据溢出的情况

C语言对于int类型数据超出范围嘚处理,只有一个最简单的原则:截断处

理即超出int位长度范围的高字节被自动截掉。

比如假设int长度为16位的情况下,以下代码:

++a; /* a自增后将超出范围,高位的1被截掉实际a=0 */

C语言中int的取值范围为:- ~ 。超过了这个范围进行赋值C源代码是无法通过编译的。

下面给出简单的測试代码:

如图所示的两种情况会被截断,不会影响其它的变量:(将数转为2进制要高32位后边的仍掉)

没有看代码,只知道如果用多個变量来充当一个数应该是可行的吧当年在51单片机(8位)上计算16位的数就要用两个来算,原理是一样的吧

下载百度知道APP,抢鲜体验

使鼡百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 int型范围 的文章

 

随机推荐