你写下代码 char a = -1; 就是你告诉编译器:a是有符号数,并给它赋值-1。然后编译器告诉CPU:a是0xFF,用有符号指令处理。
回到字符'你','你'的GBK编码是0xC4E3,无论你把'你'放在char中,还是放在uchar中,CPU读到的都是0xC4E3,明白吗?所以编程语言中的强制类型转换就是理解本质后的一种处理。对于char a = -1;程序员需要它是255时就用(uchar)a,需要它是-1是就是a。反过来也一样,对于uchar a = 255;程序员需要它是-1时就用(char)a,需要它是255时就是a。