嵌入式C语言之位运算 ..|.~.
生活随笔
收集整理的這篇文章主要介紹了
嵌入式C语言之位运算 ..|.~.
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在嵌入式編程中,掌握位運算在操作寄存器的時候很方便,由于之前在上位運算的時候沒上,但是由于位運算的難度不是很大,自己編寫程序,順便做些總結(jié).
&?? |?? ~ 這三個位運算符號不難理解,但是要區(qū)別與邏輯運算符號&&? 和||
1.需要總結(jié)的是:假如要使寄存器的值為1的話,一般用 這個寄存器的值來| 上1 比如要將i的值變?yōu)?則可以使用??? i?? |=? 1;??? 意思就是將i的值與上1的值再給i。同理要讓一個變量的值變成0的話,將使用 &上0???? 例如?? i&=0;
2.但是一般寄存器都是用16進制來表示,假如要讓寄存器的N位為1? 只要將 1<<N位? 再 ? ? ? | ? ??? 這個數(shù)即可。假如要讓寄存器的N位為0 只要將 1<<N位 ,,,取反 再? &? 上這個數(shù)
1 #include<stdio.h>2 3 int main()4 {5 unsigned i=0x4590ab34; //01000 0101 1001 0000 1010 1011 0011 01006 7 int j= 0x37; // 0011 0111 8 int k= 0x42; // 0100 00109 unsigned untj=0x37; //0011 011110 11 printf("j&k is %x\n",j&k);//0000 0010 0212 printf("j|k is %x\n",j|k);//0111 0111 7713 printf("~j %x\n",~j);// 14 printf("~untj %x\n",~untj);// 1100 1000 c815 16 unsigned ret=0;17 //將i的第4位置118 ret = i|(1 << 3);19 printf("i is %x\n",i);20 printf("ret is %x\n",ret);21 22 //將i的第2位置023 ret = i& ~(1 << 2);24 printf("i is %x\n",i);25 printf("ret is %x\n",ret);26 27 //將i的第4---9置128 ret = i|(0x3f << 4);//0011 1111 =3f29 printf("i is %x\n",i);30 printf("ret is %x\n",ret);31 32 //將i的第4---9置033 ret = i&~(0x3f << 4);//0011 1111 =3f34 printf("i is %x\n",i);35 printf("ret is %x\n",ret);36 37 //將i的第4---7置1 且12-- 15置138 ret = i|(0xf << 4 | 0xf << 12) ;// 1111 =f39 printf("i is %x\n",i);40 printf("ret is %x\n",ret);41 42 //將i的第4---9置0 且13-- 15置043 ret = i&~(0x3f << 4 | 0x7 << 13) ;// 00111111 3f 0111 =744 printf("i is %x\n",i);45 printf("ret is %x\n",ret);46 47 } ~?
?
即可。
下面是測試的代碼
?
轉(zhuǎn)載于:https://www.cnblogs.com/hongzhunzhun/p/4501535.html
總結(jié)
以上是生活随笔為你收集整理的嵌入式C语言之位运算 ..|.~.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之print 格式化输出
- 下一篇: curl记录solr删除indexing