位移运算
算数位移和逻辑位移
1.算数移位和逻辑移位
- 左移规则 << : 溢出的高位丢弃,空出的低位补0,原低位数值按顺序左移到高位
- 右移规则 << : 右移分为逻辑右移和算数右移,几乎所有的编译器都对有符号数使用算数右移,而对于无符号数必须用逻辑右移。
1.逻辑右移:空出的高位补0,溢出的低位丢弃,原高位数值按顺序右移到低位;
2.算数右移:空出的高位用符号位的副本填充,溢出的低位丢弃,高位数值按顺序右移到低位;
操作 |
参数1 |
参数2 |
x << 4(左移) |
[01100011] => [00110000] |
[10010101] => [01010000] |
x >> 4(逻辑右移) |
[01100011] => [00000110] |
[10010101] => [00001001] |
x >> 4(算术右移) |
[01100011] => [00000110] |
[10010101] => [11111001] |
- 正数逻辑右移和算数右移相同;负数逻辑右移和算数右移不同;
2.C语言位移运算符
位移类型 |
描述 |
左移 << |
高位丢弃,低位补0,低位数值左移动 |
右移 >>(无符号) |
高位补0,低位丢弃,高位数值右移动 |
右移 >>(有符号) |
其结果取决于机器,空出来的位置可用0填充,或用符号位的副本填充(参考C Primer Plus 第6版) |
3.C++语言位移运算符
位移类型 |
描述 |
左移 << |
高位丢弃,低位补0,低位数值左移动 |
右移 >>(无符号) |
高位补0,低位丢弃,高位数值右移动 |
右移 >>(有符号) |
其结果取决于C++的实现,空出来的位置可用0填充,或用符号位的副本填充(参考C++ Primer Plus 第6版) |
你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。——乔布斯