查看“位运算符AND OR XOR”的源代码
←
位运算符AND OR XOR
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于这些用户组的用户使用:
用户
,labplus
您可以查看与复制此页面的源代码。
<big>Bitwise AND (&), Bitwise OR (|), Bitwise XOR (^)</big> *'''<big>按位与(&)</big>''' 按位操作符对变量进行位级别的计算。它们能解决很多常见的编程问题。下面的材料大多来自这个非常棒的按位运算指导。 <br/> <big>说明和语法:</big> 位操作符与在C + +中是一个&符,用在两个整型变量之间。按位与运算符对两侧的变量的每一位都进行运算,规则是:如果两个运算元都是1,则结果为1,否则输出0.另一种表达方式: <pre style="color:blue"> 0 0 1 1 运算元1 0 1 0 1 运算元2 ---------- 0 0 0 1(运算元1&运算元2)-返回结果 </pre> 在Arduino 中,int 类型为16 位,所以在两个int 表达式之间使用&会进行16 个并行按17位与计算。代码片段就像这样: <pre style="color:blue"> int a = 92; //二进制: 0000000001011100 int b = 101; // 二进制: 0000000001100101 int c = a & b; // 结果: 0000000001000100, 或10 进制的68 </pre> a 和b 的16 位每位都进行按位与计算,计算结果存在c 中,二进制结果是01000100,十进制结果是68.按位与最常见的作用是从整型变量中选取特定的位,也就是屏蔽。见下方的例子。 *'''<big>按位或(|)</big>''' 按位或操作符在C++中是|。和&操作符类似,|操作符对两个变量的为一位都进行运算,只是运算规则不同。按位或规则:只要两个位有一个为1 则结果为1,否则为0。换句话说: <pre style="color:blue"> 0 0 1 1 运算元1 0 1 0 1 运算元2 ---------- 0 1 1 1(运算元1 | 运算元2) - 返回的结果 这里是一个按位或运算在C + +代码片段: int a = 92; // 二进制: 0000000001011100 int b = 101; //二进制: 0000000001100101 int c = a | b; // 结果: 0000000001111101, 或十进制的125 </pre> <br/> <big>示例程序:</big><br/> 按位与和按位或运算常用于端口的读取-修改-写入。在微控制器中,一个端口是一个8位数字,它用于表示引脚状态。对端口进行写入能同时操作所有引脚。 PORTD 是一个内置的常数,是指0,1,2,3,4,5,6,7 数字引脚的输出状态。如果某一位为1,着对应管脚为HIGH。(此引脚需要先用pinMode()命令设置为输出)因此如果我们这样PORTD=B00110001;则引脚2、3、7 状态为HIGH。这里有个小陷阱,我们可能同时更改了引脚0、1 的状态,引脚0、1 是Arduino 串行通信端口,因此我们可能会干扰通信。 <pre style="color:blue"> 我们的算法的程序是: 读取PORT 并用按位与清除我们想要控制的引脚 用按位或对PORTD 和新的值进行运算 int i; // 计数器 int j; void setup() DDRD = DDRD | B11111100; //设置引脚2~7 的方向,0、1 脚不变(xx|00==xx) //效果和pinMode(pin,OUTPUT)设置2~7 脚为输出一样 serial.begin(9600); } void loop () { for (i=0; i<64; i++){ PORTD = PORTD & B00000011; // 清除2~7 位,0、1 保持不变(xx & 11 == xx) j = (i << 2); //将变量左移为·2~7 脚,避免0、1 脚 PORTD = PORTD | j; //将新状态和原端口状态结合以控制LED 脚 Serial.println(PORTD, BIN); // 输出掩盖以便调试 delay(100); } } </pre> *'''<big>按位异或(^)</big>''' C++中有一个不常见的操作符叫按位异或,也叫做XOR(通常读作”eks-or“)。按位异或操作符用‘^'表示。此操作符和按位或(|)很相似,区别是如果两个位都为1 则结果为0: <pre style="color:blue"> 0 0 1 1 运算元1 0 1 0 1 运算元2 ---------- 0 1 1 0(运算元1 ^运算元2) - 返回的结果 按位异或的另一种解释是如果两个位值相同则结果为0,否则为1。 下面是一个简单的代码示例: int x = 12; // 二进制: 1100 int y = 10; // 二进制: 1010 int z = x ^ y; // 二进制: 0110, 或十进制 6 // Blink_Pin_5 //演示“异或” void setup(){ DDRD = DDRD | B00100000; / /设置数字脚5 设置为输出 serial.begin(9600); } void loop () { PORTD = PORTD ^ B00100000; // 反转第5 位(数字脚5),其他保持不变 delay(100); } </pre>
返回至
位运算符AND OR XOR
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
软件
Labplus软件
mPython软件
Mixly集成盛思版
mpython_conn
教学套件
创客初级实验箱
创客初级实验箱进阶版
创客中级实验箱
创客中级实验箱Ⅱ
人工智能交互实验箱
桌面机器人
乐动魔盒
可穿戴作品电子套件
创意触摸板套装
乐动魔块中级套装
乐动魔块高级套装
bot:bit
编程造物套装
逻辑造物套装
人工智能套装
物联网套装
高中信息技术套装
掌控板初级套装
初中信息技术材料包
开源硬件教学套装
冲锋舟
造物
Arduino
乐动魔块(旧版)
Blue:bit电子积木
MicroBit系列
掌控板系列
AI摄像头V1.0
AI摄像头V2.0
1956
掌控魔盒
乐动掌控
乐动魔块
互动作品
森林奇遇记
创客森林
创客乐园
物联网演示系统
博物馆防盗演示实验系统
梦想舞台演示实验系统
智能家居演示实验系统
智能教室演示实验系统
智能停车场演示实验系统
DIY-木板系列
嘘寒问暖
硬币存款机
吼一声试试
斜不胜正灯
时光葫芦
旋转转盘
越光宝盒
治愈系萌犬
光明使者
避障机械车
DIY-亚克力系列
情绪机器人
创意七彩灯
温湿度机器人
留言机
游龙戏灯
三色时钟
光影精灵
光影时钟
智能应用系列
LED眼镜
32x16 RGB LED点阵屏
DIY环境温湿度显示系统
DIY创客空间访客记录仪
其他
金属结构件套装
耗材存取管理柜
更多
课程资源
常见问题解答
Arduino语法参考手册
链接
Labplus官网
STEAM创客教育平台
工具
链入页面
相关更改
特殊页面
页面信息