C BitWise – “1 <<(num - 1)”和“| =”有什么作用?
你能告诉我convertLedNumberToBit和LedDriver_TurnOn的作用吗?我不明白1<<<<< (num - 1)和| =
static uint16_t * ledsAddress; static uint16_t convertLedNumberToBit(int ledNumber) { return 1 << (ledNumber - 1); } void LedDriver_TurnOn(int ledNumber) { *ledsAddress |= convertLedNumberToBit(ledNumber); } 解决方法
要在I / O端口ledsAddress处将LED [ledNumber]切换为“ON”,必须将等效位设置为“1”.但是,在更改I / O端口值时,必须保持所有其他LED的状态仍为“ON”.
convertLedNumberToBit(int ledNumber)使用掩码b0000000000000001(16bits)通过切换到(ledNumber-1)的左侧将ledNumber位设置为“1”{当ledNumber为1时不需要移位. 例如:(ledNumber = 4)=>返回值为b0000000000001000 = 0x0008. 然后调用| = convertLedNumberToBit(ledNumber)将仅强制ledNumber位为’1’而不用二进制OR来改变其他位. 例如:(led1,led3& led7为’ON’)
void LedDriver_TurnOff(int ledNumber) { *ledsAddress &= ~(convertLedNumberToBit(ledNumber)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails-3 – 连接范围以获取Rails 3中的数
- ruby-on-rails – 来自textarea的输入以简单的形
- 为什么这个正则表达式只在Python的行开头匹配?
- get set 注解 以及public属性 依赖注入该怎么写
- ruby-on-rails – 如何在中间件中设置current_us
- sqlite – INSERT OR REPLACE外键ON DELETE CASC
- c# – 对于2D数组,Array.Copy()比for循环更快吗?
- 安装ryu的依赖包lxml时出现错误
- 将react-redux集成到现有的Angularjs应用程序中
- CVP认证学习笔记--李天宇015实现绘图节点