unsigned signed类型区分很重要

来源:互联网 发布:小店收快递软件 编辑:程序博客网 时间:2024/05/21 10:09

也许,我们写起代码来随手就是定义一个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。这是后话了。