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