//低精度向高精度转换 char c1 = '/x56';//二进制为01010110最高位为0 char c2 = '/xab';//二进制为10101011最高位为1 //有符号数转换时填充其最高位的值 int n1 = c1; int n2 = c2; printf("%08x/n", n1);//00000056 printf("%08x/n", n2);//ffffffab unsigned char c1 = '/x56'; unsigned char c2 = '/xab'; //无符号数转换时不管最高位为什么,都填充0 int n1 = c1; int n2 = c2; printf("%08x/n", n1);//00000056 printf("%08x/n", n2);//000000ab //位运算右移时最高位填补同理,若为有符号数,则填补其最高位数,若为无符号数,则补0 char c1; char c2; unsigned char u1; unsigned char u2; int n1; int n2; c1 = 127; c2 = 129; u1 = 127; u2 = 129; n1 = 0xffffffff; n2 = 0xffffffff + 1; printf("%d %u/r/n", c1, c1);//127 127(高位补0,值不变) //有符号数:129 = 0x81 = (100000