Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381462
  • 博文数量: 69
  • 博客积分: 1486
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 18:38
个人简介

...

文章分类
文章存档

2024年(1)

2021年(2)

2020年(2)

2016年(9)

2015年(34)

2011年(14)

2010年(7)

分类: C/C++

2011-09-21 19:53:07

最近在做一个项目时,程序的要求是:将数据以32位存入文件中,因为在32位机上操作习惯了,所以直接将数据类型设置为 int 型,结果在测试数据的时候,发现数据好长,检查了一下,程序的结构,没有发现什么逻辑上的错误,偶然间一个同学问我:怎么查看本机内核的版本,我说你用: uname -a 看一下,对呀,我怎么忘记了这个命令,检查一看,原来我的机子是 64 位的,原来问题出在这里了!

简单小结一下这次的问题:

  1. 整型是 C语言的基本类型之一,int 是整型变量的基本类型,整型变量还有短整型(short int)和长整型(long ing),它们在内存中所占的字节数是不一样的,在32位机上short int占两个字节,即16位,而整型和长整型占用4字节32位(但是有的微机上是:短整型和整型都是16位,长整型32位),这个可以通过 sizeof 来计算
  2. 默认的情况下 一般是有符号的,只有在指明了 unsigned 时,才是无符号的,还有一点要特别声明一下,就是如果你定义的是 unsigned 类型的,那么在 printf 时,你觉得没有错误,但是打印的数据就是有错误,那么请仔细检查,在printf 时格式应该是:
    1. printf("data is:%u\n" , data);
    当你定义了 unsigned 时,数据的范围已经改变了,而 %d 打印的是有符号的,所以……
  3. 既然是32位机的,那么我需要32位的应该怎么定义呢,其实,内核已经给我们设置好了,在头文件中就有这样的定义,大家可以查看 /usr/include/stdint.h 和 linux/types.h 中的相关定义,所以在做项目时应该避免使用像 int 之类的,也是便于可移植,取而代之像 uinit32_t

总结:

在项目时,这些都是很容易被疏忽的,所以小小的总结一下!

 

阅读(2301) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

GFree_Wind2011-09-22 12:44:57

所以一般项目中会定义自己的基本类型,以保证各平台的一致性。

不过对于int,不是所有64位机,都把它作为64位的