左移<<
将一个数的二进制位左移,高位丢弃,低位补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
即:
| 算术左移/右移 | 有符号数的倍增与减半 |
|---|---|
| 逻辑左移/右移 | 无符号数的倍增与减半 |
博客介绍了C语言中的左移和右移操作。左移是将一个数的二进制位左移,高位丢弃,低位补0;右移方面,几乎所有编译器C语言实现是左移逻辑、右移算术,无符号数右移为逻辑,目的是保证右移代表除以2,左移代表乘以2。
1543

被折叠的 条评论
为什么被折叠?



