| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1848 人关注过本帖
标题:初学c语言,关于数据类型的问题求大神指导!
只看楼主 加入收藏
北冥有鱼:
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2017-10-12
结帖率:45.45%
收藏
 问题点数:0 回复次数:3 
初学c语言,关于数据类型的问题求大神指导!
自学了一下数据类型那块的,它说int 在内存中的大小和计算机的寄存器有关系,也就是寄存器的宽度,输入了一下sizeof(int),结果是等于4,也就是32位的,但是电脑是64位的啊, 哪里搞错了???  预算结果是8,结果却是4.。。。。。。

还有那个通常说的几位几位意思就是 二进制的位数吗??
搜索更多相关主题的帖子: c语言 数据类型 int 寄存器 结果 
2017-12-05 16:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
这说法现在不正确。详见 http://zh. 中的 lp32 ilp32 那栏

另外,它也和你的电脑没关系,比如古老的TC,你放到64位系统下编译,它也输出2
2017-12-05 18:12
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
整形4字节这个事情从计算机发展史来看是有变化的,但是,对于具体的计算机来说,是操作系统内存管理与分配决定的。操作系统与计算机硬件当然有不可分割的关系,如果硬说是和寄存器对应,这是不对的。
具体的情况可以参考微机原理和操作系统相关的书籍。

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-12-06 19:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
多说说

在一个16位的系统中,使用8位的整型,就像姑娘裹上了小脚,不能释放其洪荒之力;使用32位的整型,又如小马拉重车,效率极低。
所以在非必要的情况下,优先使用和系统等长的整型,这是效率最高的。而int/uint当初就被设计成和系统等长。
所以为DOS16服务的TC中sizeof(int)就是2,这是在编译器设计阶段就定好的,即你将TC放到x64中sizeof(int)也是2,不会变成8

但是,后来,32位系统存活时间太长了,那些烂货们在各种需要平台无关的地方使用int而不会出现问题,于是大量代码中在不该用int的地方用了int。
于是,大部分编译器厂家只好认怂,升到64位时依然将int定为32位,免得用户的旧代码奔溃掉。
所以为win64服务的VC++15中sizeof(int)是4,而不是8

附上各种数据模型:
TYPE          LP32     ILP32   LLP64   LP64    ILP64
char           8        8       8       8       8
short         16       16      16      16      16
int           16       32      32      32      64
long          32       32      32      64      64
long long     64       64      64      64      64
pointer       32       32      64      64      64
在x64中,gcc/clang选择使用LP64,而vc选择使用LLP64

看得好乱,所以C标准中加了个<stdint.h>,里面定义了各种指定长度的整型类型,比如
int32_t,那就一定是32bits
int_least32_t,那就至少是32bits,可能是32bits,可能是64bits甚至更高,编译器会选一个位数尽可能少,但一定大于32bits的类型给你
int_fast32_t,那就至少是32bits,可能是32bits,可能是64bits甚至更高,编译器会选一个效率尽可能高的类型给你。
2017-12-07 09:45
快速回复:初学c语言,关于数据类型的问题求大神指导!
数据加载中...
 
   



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

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