免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: memory13shao
打印 上一主题 下一主题

请教数据类型u_int8_t与unsigned int [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
11 [报告]
发表于 2008-08-05 20:02 |只看该作者
原帖由 memory13shao 于 2008-8-5 17:07 发表
弱弱地问一下,如何知道自己的机器是32位还是16位还是其他?

看 cpu 信息,怎么看是和 os 相关的。

论坛徽章:
0
12 [报告]
发表于 2008-08-06 10:03 |只看该作者

回复 #10 memory13shao 的帖子

int 是平台相关的,它可能是2字节,也可能是4字节。
u_int8_t 是平台无关的,在任何平台下,它都代表8位无符号数。u代表unsigned, int8代表8位(1字节), t是系统数据类型的意思。

论坛徽章:
0
13 [报告]
发表于 2008-08-06 10:04 |只看该作者
原帖由 memory13shao 于 2008-8-5 17:09 发表
还有以后遇到这种类型 譬如u_int8_t ,int,u_int16_t,怎么去看它们之间的区别


i"nt 变量的长度一般和机器字长相同,在 32 位机上是 4 字节,在 16 位机上为 2 字节" 说的很对,所以一般不同的机型,开始要用sizeof检测,然后用typedef 宏定义才能做到移植性比较高

举例说明:(如果int 为4为)

typedef int int_4;

论坛徽章:
0
14 [报告]
发表于 2008-08-06 10:33 |只看该作者
原帖由 helponhelp 于 2008-8-6 10:04 发表


i"nt 变量的长度一般和机器字长相同,在 32 位机上是 4 字节,在 16 位机上为 2 字节" 说的很对,所以一般不同的机型,开始要用sizeof检测,然后用typedef 宏定义才能做到移植性比较高

举例说明:(如果i ...



也就是说int类型与机器字长相同。u_int8_t一定为8位,u_int16_t一定为16位。


那short类型,long类型,还有float及double类型呢?怎么在不同机器字长的机器上,如何区分short类型,long类型,还有float及double类型

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
15 [报告]
发表于 2008-08-06 20:32 |只看该作者
原帖由 memory13shao 于 2008-8-6 10:33 发表



也就是说int类型与机器字长相同。


错了。int 型变量的长度一般和CPU字长相同,并不是一定与CPU字长相同,这个还和 OS 及 Compiler 有关。
u_int8_t一定为8位,u_int16_t一定为16位。

错了。u_int8_t 的长度只是不小于 8 位,并不是一定为 8 位, u_int_t 类似。

那short类型,long类型,还有float及double类型呢?怎么在不同机器字长的机器上,如何区分short类型,long类型,还有flo ...

整型(char, short, int, long, ...) 和浮点类型(float, double, ...) 的差别比较大。但是它们的大小及表示方法 CPU/Compiler/Os 都约定好了。

[ 本帖最后由 MMMIX 于 2008-8-6 20:33 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2008-08-07 11:07 |只看该作者
也就是说int类型与机器字长相同。u_int8_t一定为8位,u_int16_t一定为16位。


那short类型,long类型,还有float及double类型呢?怎么在不同机器字长的机器上,如何区分short类型,long类型,还有flo ... [/quote]
都不一定的,这个主要是通过sizeof 先测试一下,为你让你的程序可以移植,一般的做法是通过typedef重新定义一套适合自己的类型,举例如下:
如果你现在的机器,你通过sizeof测试发现 int 是16位 ,long为32位,你可以定义如下:
typedef  int  int16
typedef long int32
typedef ....
...

如果你的程序需要移植到其他的机型,你通过sizeof测试发现此机器的int为32位,long为64位,但short为16位,int为32位这时候,你只需要改变你现有程序的typedef定义,既:
typedef short int16
typedef int int32
可以把typedef放到.h头文件,以后移植只需要改变.h头文件既可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP