char 与 unsigned char的区别

来源:互联网 发布:js运动轨迹模拟 编辑:程序博客网 时间:2024/06/14 08:58
在数据类型转换时有区别:
如果是char,系统认为最高位是符号位,那么将对最高位进行拓展
如果是unsigned char,系统认为没有符号位,不会对最高位拓展。
    对最高位拓展是什么意思呢?char在C里占一个字节,比如0x80的一个char,二进制为1000 0000,如果转为int则,认为最高位的1是符号位,int是4个字节,剩下的3个怎么办呢,肯定得填充了,系统会在前面填充。如果最高位是符号位,那么系统会在前面填充3个字节的符号位(这和计算机里头数值用补码表示有关,比如0x80的一个char,1000 0000,表示-128,转为int类型时,我们还是希望是-128,此时系统会在前三个字节里全部填充符号位1,变成1111 1111,1111 1111,1111 1111,1000 000。这个数在计算机里还是表示-128。
    如果一个0x80的unsigned char,二进制也是1000 0000,由于是无符号型(只能表示正数),系统认为该数最高位不是符号是数,所以系统认为所表示的值是128,若转为int型,系统会在前三个字节填充0,变成
0000 0000,0000 0000,0000 0000,1000 000。这个数在计算机int里还是表示128。

注意:赋给unsigned int也会扩展。

0 0
原创粉丝点击