
C语言int的取值范围
就像知道int的取值范围在内存中分配2个字节也就16位的二进制-32768怎么来的32767又是怎么来的0111111111111111我知道最高位代表符号位上面的十进制...
就像知道int的取值范围
在内存中分配2个字节 也就16位的二进制
-32768 怎么来的
32767又是怎么来的
0111 1111 1111 1111
我知道最高位代表符号位 上面的十进制为 32767
最小取值应该是最小的负数
1111 1111 1111 1111
搞晕了 可能给我说明一下! 展开
在内存中分配2个字节 也就16位的二进制
-32768 怎么来的
32767又是怎么来的
0111 1111 1111 1111
我知道最高位代表符号位 上面的十进制为 32767
最小取值应该是最小的负数
1111 1111 1111 1111
搞晕了 可能给我说明一下! 展开
展开全部
二进制数在计算机内存储的是其补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取反后加1
比如:
1=(0001)补=(0001)
-1=(1001)补=(1111)
计算机存储-1就是存储的1111
因此
当int表示范围为16位时,可以表示的最大负数为:
10000...0000(后面有15个0)
相当于-0
但这其实是-32768=110000...0000(第一位符号位,后面有15个0)的补码表示
可以理解为16位的int足可以表示-32768的补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取反后加1
比如:
1=(0001)补=(0001)
-1=(1001)补=(1111)
计算机存储-1就是存储的1111
因此
当int表示范围为16位时,可以表示的最大负数为:
10000...0000(后面有15个0)
相当于-0
但这其实是-32768=110000...0000(第一位符号位,后面有15个0)的补码表示
可以理解为16位的int足可以表示-32768的补码
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在写程序的时候最好用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;
}
因为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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1000 0000 0000 0000不是-0是-1
所以1000 0000 0000 0001是-2
而0000 0000 0000 0001是1
明白了?
所以1000 0000 0000 0001是-2
而0000 0000 0000 0001是1
明白了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询