C语言左移位符号 << 结合 |= 实现置位操作
生活随笔
收集整理的這篇文章主要介紹了
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; //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; }再用=|符號可以實現讓得某位置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; }有什么用?(根據某大佬的回答。。。)
這個整數的 bits 被視為開關,英文可能為 composite flags 或者 flags。中文可能被翻譯成組合值。比如一個 uint32_t 可以表示 32 個相互獨立的開關。還有一種是從 1,2,3,4,5 這樣一直連續遞增的數值(這種整數只看它的整體實際數值,某個 bit 沒有任何物理意義),這個應該怎么叫我也不記得了,可能沒什么叫法。注意這兩者的區別。還有的整數的 bits 被分段劃分為同時有以上兩種用法(根據設計者的設計)。
參考文章1:C語言為什么要左移位<<?
參考文章2:KYSL ??禂z像頭 HEOP報警組件集成開發指南.pdf
總結
以上是生活随笔為你收集整理的C语言左移位符号 << 结合 |= 实现置位操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: typedef enum的用法(枚举)
- 下一篇: C语言rewind()函数(设置文件位置