加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C BitWise – “1 <<(num - 1)”和“| =”有什么作用?

发布时间:2020-12-16 10:04:36 所属栏目:百科 来源:网络整理
导读:你能告诉我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){ *ledsAd
你能告诉我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’)
在OR b0000000001000101 = 0x0045之前.
LedDriver_TurnOn(4)=> b0000000000001000 = 0x0008
在OR b0000000001001101 = 0x004D之后.

To switch ‘OFF’ the same LED,you have just to replace the OR function by the AND function of the NOT mask.

void LedDriver_TurnOff(int ledNumber)
{
    *ledsAddress &= ~(convertLedNumberToBit(ledNumber));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读