找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1423|回复: 6
收起左侧

单片机如何用一条指令,让寄存器其中两位同时取反?

[复制链接]
ID:709761 发表于 2022-4-9 09:18 | 显示全部楼层 |阅读模式
如何用一条指令,让寄存器其中两位同时取反。
回复

使用道具 举报

ID:161164 发表于 2022-4-9 11:08 | 显示全部楼层
用^=
char A = 0xA5;//B10100101
A ^= (0x03 << 2);//B00001100

A就会变为0xA9//B10101001
回复

使用道具 举报

ID:709761 发表于 2022-4-9 11:33 | 显示全部楼层
lkc8210 发表于 2022-4-9 11:08
用^=
char A = 0xA5;//B10100101
A ^= (0x03

为什么不写成A ^= 0x0c;
回复

使用道具 举报

ID:827243 发表于 2022-4-9 12:56 | 显示全部楼层
楼上正解,记住与0异或,值不变,与1异或,值取反。
回复

使用道具 举报

ID:883242 发表于 2022-4-9 13:33 | 显示全部楼层
李冬 发表于 2022-4-9 11:33
为什么不写成A ^= 0x0c;

容易读。而且他的写法里面<<2操作在编译期间就算完了,不会让单片机实时运算增加运算时间。
回复

使用道具 举报

ID:161164 发表于 2022-4-9 13:37 来自触屏版 | 显示全部楼层
李冬 发表于 2022-4-9 11:33
为什么不写成A ^= 0x0c;

因为0x03方便读记
要变0x0C位移一下就可以
回复

使用道具 举报

ID:887371 发表于 2022-4-9 14:35 | 显示全部楼层
李冬 发表于 2022-4-9 11:33
为什么不写成A ^= 0x0c;

可以这样写。
  1. a^=(1<<2)|(1<<3);//bit2 3取反
  2. a^=(1<<0)|(1<<2)|(1<<4)|(1<<6);//bit0 2 4 6取反
复制代码



我觉得这样写更直观。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表