C语言左移位符号 << 结合 |= 实现置位操作
生活随笔
收集整理的這篇文章主要介紹了
C语言左移位符号 << 结合 |= 实现置位操作
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天看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; //2int b = 0x1 << 2; //4int c = 0x1 << 3; //8int d = 0x1 << 4; //16int e = 0x1 << 5; //32int f = 0x1 << 6; //64int g = 0x1 << 7; //128int h = 0x1 << 8; //256int i = 0x1 << 9; //512return 0; }再用=|符號(hào)可以實(shí)現(xiàn)讓得某位置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); //1b |= (0x1<<1); //2c |= (0x1<<2); //4d |= (0x1<<3); //8return 0; }有什么用?(根據(jù)某大佬的回答。。。)
這個(gè)整數(shù)的 bits 被視為開關(guān),英文可能為 composite flags 或者 flags。中文可能被翻譯成組合值。比如一個(gè) uint32_t 可以表示 32 個(gè)相互獨(dú)立的開關(guān)。還有一種是從 1,2,3,4,5 這樣一直連續(xù)遞增的數(shù)值(這種整數(shù)只看它的整體實(shí)際數(shù)值,某個(gè) bit 沒有任何物理意義),這個(gè)應(yīng)該怎么叫我也不記得了,可能沒什么叫法。注意這兩者的區(qū)別。還有的整數(shù)的 bits 被分段劃分為同時(shí)有以上兩種用法(根據(jù)設(shè)計(jì)者的設(shè)計(jì))。
參考文章1:C語言為什么要左移位<<?
參考文章2:KYSL 海康攝像頭 HEOP報(bào)警組件集成開發(fā)指南.pdf
總結(jié)
以上是生活随笔為你收集整理的C语言左移位符号 << 结合 |= 实现置位操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: typedef enum的用法(枚举)
- 下一篇: C语言rewind()函数(设置文件位置