细节6:算术右移和逻辑右移

一、对于有符号数 int

正数,左移直接丢弃最高位,在低位补对应个数的0;
正数,右移直接丢弃最低位,在高位补对应个数的0;
负数,左移直接丢弃最高位,在低位补对应个数的0;
负数,右移直接丢弃最低位,在高位补对应个数的1;

二、对于无符号数 unsigned int

左移直接丢弃最高位,在低位补对应个数的0;
右移直接丢弃最低位,在高位补对应个数的0,即使最高位原来是1;

三、总结

算术右移:最高位填充符号位。正数填充0,负数填充1
逻辑右移:最高位填充0
左移都是补0

参考链接:https://blog.csdn.net/test1280/article/details/79858715

你可能感兴趣的:(C/C++深入解读)