| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15330 人关注过本帖
标题:关于short int 的取值范围
只看楼主 加入收藏
蛋疼菜鸟
Rank: 1
来 自:山东省
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-2-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
关于short int 的取值范围
#include<stdio.h>
int main()
{
   
    short int b=32768;
    short int a = 32767;
    printf("%d,%d,%d\n", a,  a+ 1,  a+ 2);
        printf("%d,%d,%d\n", b,  b+ 1,  b+ 2);
   
}


        结果却是      32767  32768  32769

                     -32768  -32767  -32766

为什么会出现这种情况
2016-04-20 22:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:20 
short是16位有符号整数,范围-32768~+32767。
short int b=32768,就是 short int b=0x8000,最高位是1, 实质是 -32768。
printf()的"%d"格式是32位有符号整数。
比较一下看看:
程序代码:
#include<stdio.h>
int main()
{
    short int a = 0x7FFF;
    short int b = 0x8000;
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", 0x8000);
    printf("%d\n", 0x7FFFFFFF);
    printf("%d\n", 0x80000000);
}
收到的鲜花
  • 蛋疼菜鸟2016-04-21 20:11 送鲜花  3朵   附言:好文章
2016-04-21 00:29
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
用短型d输出才符合short声明:
程序代码:
#include<stdio.h>
int main()
{
    short int b=32768;
    short int a=32767;
    printf("%hd,%hd,%hd\n", a,  a+1,  a+2);
    printf("%hd,%hd,%hd\n", b,  b+1,  b+2);
}
2016-04-21 07:54
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    printf("16bit 0x7FFF( %hd)\n", 0x7FFF);
    printf("16bit 0x8000(%hd)\n",  0x8000);
    printf("32bit 0x7FFFFFFF( %d)\n", 0x7FFFFFFF);
    printf("32bit 0x80000000(%d)\n",  0x80000000);
    printf("64bit 0x7FFFFFFFFFFFFFFF( %lld)\n", 0x7FFFFFFFFFFFFFFF);
    printf("64bit 0x8000000000000000(%lld)\n",  0x8000000000000000);
}


[此贴子已经被作者于2016-4-21 08:11编辑过]

2016-04-21 08:09
蛋疼菜鸟
Rank: 1
来 自:山东省
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-2-14
收藏
得分:0 
回复 4楼 吹水佬
这样看来,格式说明符%hd  %d %lld   分别对应16位  32位  64位的整数范围。
2016-04-21 21:19
C蝌蚪
Rank: 2
来 自:安徽阜阳
等 级:论坛游民
威 望:1
帖 子:26
专家分:37
注 册:2016-4-3
收藏
得分:0 
回复 5楼 蛋疼菜鸟
也不能这么说吧 !编译器不同结果也可能不同吧。int标准定义的是最低不能低于16位  long最低不能超过32位  不同编译器可能结果不一样吧。
2016-04-21 22:52
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
一般指32位编译,64位编译另论。
2016-04-21 23:03
蛋疼菜鸟
Rank: 1
来 自:山东省
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-2-14
收藏
得分:0 
回复 7楼 吹水佬
我看书上说的是 int 的数值范围大小取决于一个字节的大小。32位编译器是指其中的一个字节为32位吗?
2016-04-23 22:10
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用蛋疼菜鸟在2016-4-23 22:10:38的发言:

我看书上说的是 int 的数值范围大小取决于一个字节的大小。32位编译器是指其中的一个字节为32位吗?

一个字节是8位(8bit)
int 的数值范围视不同编译器而定
程序代码:
16位编译器

char            1个字节
char*           2个字节
short int       2个字节
int             2个字节
unsigned int    2个字节
float           4个字节
double          8个字节
long            4个字节
long long       8个字节
unsigned long   4个字节


32位编译器

char            1个字节
char*           4个字节
short int       2个字节
int             4个字节
unsigned int    4个字节
float           4个字节
double          8个字节
long            4个字节
long long       8个字节
unsigned long   4个字节


64位编译器

char            1个字节
char*           8个字节
short int       2个字节
int             4个字节
unsigned int    4个字节
float           4个字节
double          8个字节
long            8个字节
long long       8个字节
unsigned long   8个字节 
2016-04-23 23:38
雨润云温
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-13
收藏
得分:0 
回复 9楼 吹水佬
行家啊

往事随风辗转
2017-05-23 21:21
快速回复:关于short int 的取值范围
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032392 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved