C语言左移位符号 << 结合 =| 实现置位操作
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言左移位符号 << 结合 =| 实现置位操作相关的知识,希望对你有一定的参考价值。
今天看hk文档,有一串代码不是很懂什么意思:
alarm_msg.alarm_linkage.trigger_record_chan |= (0x1 << 1); /* bit1 - record the first channel (为什么要这么操作?)*/
首先x << k = x ^ k
,如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
int a = 0x1 << 1; //2
int b = 0x1 << 2; //4
int c = 0x1 << 3; //8
int d = 0x1 << 4; //16
int e = 0x1 << 5; //32
int f = 0x1 << 6; //64
int g = 0x1 << 7; //128
int h = 0x1 << 8; //256
int i = 0x1 << 9; //512
return 0;
再用=|
符号可以实现让得某位置1:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
int a = 0;
int b = 0;
int c = 0;
int d = 0;
a |= (0x1); //1
b |= (0x1<<1); //2
c |= (0x1<<2); //4
d |= (0x1<<3); //8
return 0;
有什么用?(根据某大佬的回答。。。)
这个整数的 bits 被视为开关,英文可能为 composite flags 或者 flags。中文可能被翻译成组合值。比如一个 uint32_t 可以表示 32 个相互独立的开关。还有一种是从 1,2,3,4,5 这样一直连续递增的数值(这种整数只看它的整体实际数值,某个 bit 没有任何物理意义),这个应该怎么叫我也不记得了,可能没什么叫法。注意这两者的区别。还有的整数的 bits 被分段划分为同时有以上两种用法(根据设计者的设计)。
参考文章2:KYSL 海康摄像头 HEOP报警组件集成开发指南.pdf
以上是关于C语言左移位符号 << 结合 =| 实现置位操作的主要内容,如果未能解决你的问题,请参考以下文章