C语言int的取值范围

就像知道int的取值范围在内存中分配2个字节也就16位的二进制-32768怎么来的32767又是怎么来的0111111111111111我知道最高位代表符号位上面的十进制... 就像知道int的取值范围
在内存中分配2个字节 也就16位的二进制
-32768 怎么来的
32767又是怎么来的
0111 1111 1111 1111
我知道最高位代表符号位 上面的十进制为 32767
最小取值应该是最小的负数
1111 1111 1111 1111
搞晕了 可能给我说明一下!
展开
 我来答
百度网友000938229
推荐于2017-09-29 · TA获得超过2476个赞
知道小有建树答主
回答量:4411
采纳率:0%
帮助的人:879万
展开全部
二进制数在计算机内存储的是其补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取反后加1
比如:
1=(0001)补=(0001)
-1=(1001)补=(1111)
计算机存储-1就是存储的1111
因此
当int表示范围为16位时,可以表示的最大负数为:
10000...0000(后面有15个0)
相当于-0
但这其实是-32768=110000...0000(第一位符号位,后面有15个0)的补码表示
可以理解为16位的int足可以表示-32768的补码
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96430e24a
2010-02-18
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
在写程序的时候最好用C库定义好的宏或函数,
因为int的范围因机器而异。为了避免在程序中直接写死最大值。
C库会用条件编译根据你的机器选择正确的最大值。

这个网址包括各种类型的最大值
http://msdn.microsoft.com/en-us/library/7fh3a000(VS.80).aspx

如果是c++的话看这个:
#include <limits>
#include <stdio.h>
using namespace std;
int main(int,char**)
{
printf("%d",numeric_limits<int>::max());
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beshycn
2010-02-18 · TA获得超过127个赞
知道答主
回答量:244
采纳率:0%
帮助的人:200万
展开全部
1000 0000 0000 0000不是-0是-1
所以1000 0000 0000 0001是-2
而0000 0000 0000 0001是1
明白了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式