标签:
常见的错误做法是:
如果a = 0xf1,上面的输出将是 0xfffffff1 而不是 0xf1。
究其原因,%x 是 unsigned int 或 int 型输出 ,所以 printf("%x", a) 在执行时将自动将 a 类型提升(char 将提升至 int;
unsigned char 将提升至 unsigned int), 注意到 char 是 signed(有符号的),
如果这时 a 是负数 ,在提升的时候前面将会补1 ,即象反例中的 0xf1 => 0xfffffff1;而unsigned char 在提升的时候只会补0。
hh 将会将 int 转化成 char;unsigned int 转化成 unsigned char。具体可以 man 3 printf 查看详情。
上面隐含过程是:先将 char a 提升至 int,然后再与 0xff 相与。
标签:
原文地址:http://www.cnblogs.com/YPHFree/p/5333253.html