Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67835
  • 博文数量: 23
  • 博客积分: 153
  • 博客等级: 入伍新兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-09 13:42
文章分类

全部博文(23)

文章存档

2011年(23)

分类:

2011-09-25 00:47:40

最近在做一个项目时,程序的要求是:将数据以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

总结:

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

 

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