现代大多数计算机都支持8位字符,所以大多数C语言编译器都把字符实现为8为整数。但是,这并不意味着所有的编译器都使用这个方法。
当需要把一个字符转换为一个较大的整数时,问题就来了:将字符作为有符号数呢?还是作为无符号数呢?
如果作为有符号数,要将char类型的数扩展到int类型时,同时还得复制符号位,而如果是作为无符号数,则只需要在多余的位上补0。而且前者意味着一个8为字符的取值范围是-128~127,而后者的范围则是0~255,所以会反过来影响到哈希表的设计方式。
解决方法是:将字符声明为无符号字符(unsigned char),这样转换使只需要在多余的位补0。否则,在某些编译器上可能会作为有符号数处理,而另一些处理器上又会作为无符号数处理。 |
|