关闭

char 与 unsigned char的区别

146人阅读 评论(0) 收藏 举报
分类:
在数据类型转换时有区别:
如果是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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:488769次
    • 积分:6727
    • 等级:
    • 排名:第3483名
    • 原创:32篇
    • 转载:1006篇
    • 译文:1篇
    • 评论:12条
    最新评论