| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 98751 人关注过本帖, 1 人收藏
标题:int、long int 、long long int 占用字节疑问
只看楼主 加入收藏
东陵
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-3-23
结帖率:0
收藏(1)
已结贴  问题点数:10 回复次数:8 
int、long int 、long long int 占用字节疑问
刚刚看书的时候看到这样一张表
类型名称        字节数    取值范围
signed char       1        -128~+127
short int         2        -32768~+32767
int               4        -2147438648~+2147438647
long int          4        -2147438648~+2141438647
long long long int  8      -9223372036854775808~+9223372036854775807

long long int 这是什么类型,整型不是应该只有int\long int\short int 三种类型吗?
我在VC++6里建了一个long long int 类型的变量,报错了,是书上写错了?
我看的是c primer plus第四版的,这么经典的应该不可能写错吧- -可是我为什么建立这种类型的变量会报错?求高人解答
搜索更多相关主题的帖子: long 
2012-03-24 05:39
东陵
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-3-23
收藏
得分:0 
error C2632: 'long' followed by 'long' is illegal
这是报错的时候查出来的原因。说是非法的,可是书上是这么写的。我在谷歌里找到几个文章也有这个类型,但可惜没讲用法。
还有一个问题
long int不是应该占用8个字节吗,怎么变成了占用4个字节
2012-03-24 05:44
东陵
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-3-23
收藏
得分:0 
刚刚在网上找到这个语句查了下,long int 是4个字节的printf("sizeof()=%d\n",sizeof());
有点搞不懂了,long int 和 int 既然占用的都是一样的字节取值范围又一样,为什么还要long int这个类型,多敲几个字不是很麻烦,求高人解释下,前面那个long long int还是找不到答案,求高人一并解释下,
2012-03-24 05:55
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:5 
long long在win32中是确实存在,长度为8个字节;定义为LONG64。
为什么会出现long int呢,在win32现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。
即便是long long,在TI的有款平台中,长度为5
也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型的假象长度。
2012-03-24 12:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
long long int不是所有编译器都支持的,有些支持这种数据类型的,可能是真支持,也可能是模拟支持,总之它不是标准类型。在.NET4框架中,有64位的长整型数据,这个框架下的所有语言都能使用,但不是所有语言本身都有定义这样的数据类型,也就是说,你尽可使用_int64或System.Int64来定义64位的整数,但未必有long long这样的定义。

VS2010的.NET4中,C#语言的int是32位的,long是64位的,但其C++的int和long都是32位的,后者支持64位的long long类型。long,对前者,编译后的BCL数据类型是System.Int64,对后者则是System.Int32,把long long编译为System.Int64。这个框架下所有语言的数据类型,在编译后都是这种BCL数据类型,是看不出来原先用什么定义的,而且,所有语言编译之后使用的执行库,都是一样的,各种语言之间的执行效率几乎没有差别,差别在你熟悉哪种语言编程而已。

经典的书也有告诉你编程时不要假定数据的具体尺寸。union对内置数据类型的尺寸很敏感,因此编程经验也有告诫慎用union,除非你决定不考虑移植环境,否则最好不要使用这个东西。

[ 本帖最后由 TonyDeng 于 2012-3-24 14:06 编辑 ]

授人以渔,不授人以鱼。
2012-03-24 13:44
樊士庆
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-2-26
收藏
得分:0 
《C和指针》中写过:
long与int:标准只规定long不小于int的长度,int不小于short的长度.
2012-10-07 16:50
小盗发飙
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2013-1-1
收藏
得分:0 
那不是和double一样,谁能回复我,补码是嘛
2013-01-01 18:12
liuxiaojie
Rank: 2
等 级:论坛游民
帖 子:16
专家分:14
注 册:2013-3-14
收藏
得分:0 
visual c++ 6.0中不支持,long long int,是在vc99中添加此功能的
2013-04-03 22:22
LuckyBear
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2015-8-18
收藏
得分:0 
回复 7楼 小盗发飙
double与int类型的存储机制不同,long int的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比int能表示的数据范围更广。
2015-08-18 10:36
快速回复:int、long int 、long long int 占用字节疑问
数据加载中...
 
   



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

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