第七章 可移植性缺陷

字符是有符号整数还是无符号整数

现代计算机大多数都支持8位字符。但是当我们把字符的值从char类型转换为int类型时,应该把它当成有符号char类型还是无符号char类型至关重要,因为两者的取值范围不同。

若将char转换为无符号整型,则直接在多余的位上填0即可。若转换成有符号整型,则需要将符号位复制

不同的编译器对此处理方法不同。一些可能会将char当作无符号类型处理,而一些会当成有符号类型。

为了提高可移植性,最好的办法就是将char声明成无符号型或有符号型

注意:以下代码产生问题

char c;
(unsigned) c;

这段代码是错误的,因为在将c转换为无符号整型时,会先将c转换成int型,再转换成无符号整型

因此,正确的写法是:

(unsigned char)c;

移位运算符

在向右移位时,空出的位是由0填充还是由符号位的副本来填充?

因此,如果想让填充的数为0,可以先将变量转换为无符号数。

移位计数允许的取值范围是什么?