查看左移,右移的源代码
←
左移,右移
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
你刚才请求的操作只对属于该用户组的用户开放:
用户
您可以查看并复制此页面的源代码:
<font color="orange" size="+1">'''描述'''</font> From The Bitmath Tutorial in The Playground There are two bit shift operators in C++: the left shift operator << and the right shift operator >>. These operators cause the bits in the left operand to be shifted left or right by the number of positions specified by the right operand. More on bitwise math may be found here. <font color="orange" size="+1">'''描述'''</font> <font color="orange" size="+1">'''描述'''</font> 在C++中有两个移位运算符:左移运算符(<<)和右移运算符(>>)。可实现让操作数的每位实现左移或者右移。更多位运算可,点击[http://playground.arduino.cc/Code/BitMath 这里]。<br> <font color="orange" size="+1">'''语法'''</font> variable << number_of_bits<br> variable >> number_of_bits<br> <font color="orange" size="+1">'''参数'''</font> variable: byte, int, long型变量<br> number_of_bits: 需要移动的位数,最大不超过32。<br> <font color="orange" size="+1">'''示例'''</font> <pre style="color:dimgray"> int a = 5; // 二进制: 0000000000000101 int b = a << 3; // 二进制: 0000000000101000, 或者 4(十进制) int c = b >> 3; // 二进制: 0000000000000101, 或者说回到原始值5 </pre> <font color="red">'''注意事项'''</font> 当把x左移y位(x << y),x中最左边的y位将会丢失。 <pre style="color:dimgray"> int a = 5; // 二进制: 0000000000000101 int b = a << 14; // 二进制: 0100000000000000 - 101中的第一个1被丢弃 </pre> 如果你想确保位移不会引起数据溢出,可以简单的把左移运算当做对左运算元进行2的右运算元次方的操作。例如,要产生2的次方,可使用下面的方式: <pre style="color:dimgray"> 1 << 0 == 1 1 << 1 == 2 1 << 2 == 4 1 << 3 == 8 ... 1 << 8 == 256 1 << 9 == 512 1 << 10 == 1024 ... </pre> 当把x右移y位,x的最高位为1,位移结果由x的数据类型决定。正如我们在上面已经讨论过的,如果x是int型,那么最高位为符号位,用来决定x是否为负数。在这种情况下,符号位被复制到较低位: <pre style="color:dimgray"> int x = -16; // 二进制: 1111111111110000 int y = x >> 3; // 二进制: 1111111111111110 </pre> 这种情况被称为符号扩展,也往往不是你想要的结果。相反,你可能希望移入左边的是0。而事实上右移规则对于无符号整型是有所不同的。你可以通过数据强制转换改变从左边移入的数据。 <pre style="color:dimgray"> int x = -16; // 二进制: 1111111111110000 int y = (unsigned int)x >> 3; // 二进制: 0001111111111110 </pre> 如果你想避免符号扩展的话,建议你可以使用右移位运算符>>,作为除以2的幂的方法。例如: <pre style="color:dimgray"> int x = 1000; int y = x >> 3; // 1000除以8,得y = 125. </pre> ---- [[Arduino语法参考 | 返回Arduino语法参考列表]] 更多建议和问题欢迎反馈至 [http://www.yfrobot.com YFRobot论坛]
返回
左移,右移
。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
变种
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
YF-论坛提问
YFRobot-直营店
YFRobot-企业店
Arduino
Arduino之入门篇
Arduino入门教程
Arduino语法参考
Arduino库
Arduino核心代码
编程平台
Mixly库
Mind+库
MakeCode扩展
传感器系列
积木式传感器系列
黑板传感器系列
蓝板传感器系列
Micro:Bit
Micro:Bit 通用基础教程
Valon智能车
Valon-I
帮助
帮助
wiki语法参考
工具箱
链入页面
相关更改
特殊页面
页面信息