左移<<
将一个数的二进制位左移,高位丢弃,低位补0
例如:
int b = 1;//00000000 00000000 00000000 00000001 is 1
int a = b<<1;//00000000 00000000 00000000 00000010 is 2
右移>>
• 算术:
○ 有符号数:
□ 正数:左端移入0(符号位补位),右边丢弃
□ 负数:左端移入1(符号位补位),右边丢弃
• 逻辑:
○ 不关心正负,左边均移入0,右边丢弃
• 几乎所有的编译器C语言实现的都是是左移逻辑,右移算术,
• 对于无符号数,右移必须是逻辑
• 逻辑左移与算术左移效果一样
这种实现的目的是:保证右移永远代表除以2,左移永远代表乘以2
即:
算术左移/右移 | 有符号数的倍增与减半 |
---|---|
逻辑左移/右移 | 无符号数的倍增与减半 |