对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0;
对于有符号数来说,用的是算术移位,左移多出的会移进符号位,低位空出的补0,右移空出的高位补符号位。
例如:
char m = 0xa6;
unsigned char n = 0xa6;
printf("0x%02hhx\n", m >> 1);
printf("0x%02hhx\n", n >> 1);
片段的运行结果将是:
0xd3
0x53
对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0;
对于有符号数来说,用的是算术移位,左移多出的会移进符号位,低位空出的补0,右移空出的高位补符号位。
例如:
char m = 0xa6;
unsigned char n = 0xa6;
printf("0x%02hhx\n", m >> 1);
printf("0x%02hhx\n", n >> 1);
片段的运行结果将是:
0xd3
0x53