当前位置: 首页 > news >正文

64平台的c语言int类型值比32平台大,C语言数据类型32位和64位不同

一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:

16位平台

char         1个字节8位

short        2个字节16位

int            2个字节16位

long         4个字节32位

指针         2个字节

32位平台

char         1个字节8位

short        2个字节16位

int            4个字节32位

long         4个字节

long long 8个字节

指针         4个字节

64位平台

char         1个字节

short        2个字节

int            4个字节

long         8个字节(区别)

long long 8个字节

指针        8个字节(区别)

二、编程注意事项

为了保证平台的通用性,程序中尽量不要使用long数据库型。可以使用固定大小的数据类型宏定义,这些宏定义需要引用stdint.h头文件:

typedef signed char       int8_t

typedef short int             int16_t;

typedef int                      int32_t;

# if __WORDSIZE == 64

typedef long int              int64_t;

# else

__extension__

typedef long long int      int64_t;

#endif

三、使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台字长,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,使用它可以安全地进行整数与指针的转换运算,也就是说当需要将指针作为整数运算时,将它转换成intptr_t进行运算才是安全的。intptr_t需要引用stddef.h头文件,它的定义如下:

#if __WORDSIZE == 64

typedef long int                intptr_t;

#else

typedef int                        intptr_t;

#endif

编程中要尽量使用sizeof来计算数据类型的大小

以上类型定义都有相应的无符号类型。

四、使用ssize_t和size_t

它们分别是unsigned和signed size of computer word size。它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型。使用它们对于增加平台的通用性有很大好处,从某种意义上来说它们等同于intptr_t和uintptr_t。使用它们也需要引用stddef.h头文件。

五、socket的accept函数在有些操作系统上使用size_t是不正确的,因为accept接收的int*类型,而size_t的长度可能会超过int*的长度限制,导致错误。后来BSD使用sock_t来替代它。

相关文章:

  • c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎
  • 得到 android组件,android 获取HOME组件的Activity信息
  • android studio视频路径,Android studio相关设置及实现存在于工程目录中的视频播放...
  • android wear 1.6,玩的就是情怀 外国网友将CS 1.6移植到了Android Wear上
  • ability鸿蒙,Day8 鸿蒙,一个Ability全家桶究竟包括了什么(一)
  • Android网页文字进度,Android webview 进度显示
  • android仿qq侧滑删除,Android仿QQ微信侧滑删除效果
  • html 重置样式表,CSS 浏览器样式重置终结版
  • 压缩html源文件,js代码压缩还原详解
  • html5随机选取文本框,HTML5交互式电子邮件(带输入框和选择框)
  • html格子切换效果图,(HTML)关于格子流布局方案可以如此设计
  • android密码设成星号,将EditText密码掩码字符更改为星号(*)
  • 江西赣州信丰2021高考成绩查询,2021上半年江西信丰县教资面试成绩查询入口
  • 计算机应用bsp什么意思,bsp是什么
  • 指利用计算机技术实现对文本篇章的理解,【人工智能课|人工智能自然语言处理技术是什么】- 环球网校...
  • [译]CSS 居中(Center)方法大合集
  • 【Linux系统编程】快速查找errno错误码信息
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Apache Pulsar 2.1 重磅发布
  • HTTP请求重发
  • Markdown 语法简单说明
  • Python利用正则抓取网页内容保存到本地
  • vuex 学习笔记 01
  • windows下使用nginx调试简介
  • 反思总结然后整装待发
  • 诡异!React stopPropagation失灵
  • 聚类分析——Kmeans
  • 类orAPI - 收藏集 - 掘金
  • 前端路由实现-history
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Hibernate主键生成策略及选择
  • raise 与 raise ... from 的区别
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​人工智能书单(数学基础篇)
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # .NET Framework中使用命名管道进行进程间通信
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $jQuery 重写Alert样式方法
  • (function(){})()的分步解析
  • (三)模仿学习-Action数据的模仿
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)程序员疫苗:代码注入
  • (转)平衡树
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net中ListT 泛型转成DataTable、DataSet
  • ;号自动换行
  • [BIZ] - 1.金融交易系统特点
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)