unsigned signed类型区分很重要

也许,我们写起代码来随手就是定义一个int 或者char型的数据。

我们有没有想过这个数据到底是有符号还是无符号呢,它到底需要一个符号吗,会溢出吗?

比如最简单的两行代码

char ch = 0x90;

printf("%02x", ch);

你期待什么输出结果, 是90吗?

但是结果可能不是你想的

得出结果是ffffff90,到底是为什么呢?

char型在我的平台上默认是signed char,也就是有符号的, 那么0x90就表示一个负值了,也就是-0x70

那么这个值,用“%02x” 打印出来是多少呢

就是ffffff90(注意计算机中用补码表示)。

这显然不是我们需要的。

当以unsigned char ch = 0x90;

结果就同我们预期的一样了。


今天想把linux下的正文段打出来看一下,结果就做了个从0x80480000开始的打印程序,结果并不是每行输出32个字节(

我的程序中是以“%02x”打印的,循环32次)


所以,以后在写代码的时候,一定要注意,类型太重要了,看似没问题,其实到处是问题。

好像看过一本书上讲,看一个人的代码写的怎么样,就看看他会不会在变量前注明变量符号,会不会在有的参数

前加上必要的const。这是后话了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值