Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398936
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: 嵌入式

2015-08-31 21:35:21

    最近写C代码时,无意中发现这样一个现象!就是用printf以十六进制打印一部分char型变量时会出现这样的现象,打印出ffffff87之类的一些错误数据。但是好像大部分时间,打印出来又是正常的数据。下面看下下面这个例子。


看到这里会不会觉得有点问题,为什么data是0x87,打印出来确是ffffff87,这不是我们想要的结果!
而data1是0x54,却能打印出正确的值54。

    后来通过测试发现出这样一个规律,当字符大于0x80时,就会出现ffffff这样的现象。后来通过查资料,才明白有这样
一种说法。
    

      因为%x格式化的类型是intunsigned int, 所以字符c会被提升为int,当字符c大于等于0x80时会被当作负数处理,为保留符号位,因此提升时字符c会变为0xffffff80, 显然不正确。

    但是我们不希望这种情况出现,所以可以通过下面这种方法来解决该问题:



阅读(3949) | 评论(0) | 转发(0) |
0

上一篇:我的第一个shell脚本

下一篇:extern c的用法

给主人留下些什么吧!~~