久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: C語言運算符的含義集合,~&^!| [打印本頁]

作者: Mr.Deng_    時間: 2020-3-31 13:27
標題: C語言運算符的含義集合,~&^!|
&
  
&&
  
(與)
“&”  (都為1時,結果是1,否則是0)
  
按位與,將兩個二進制的數逐位相與,結果是相與之后的結果
  
如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0。
運算規則:0&0=0;   0&1=0;    1&0=0;     1&1=1;
  
例如:9&5可寫算式如下:(9的二進制補碼)&(5的二進制補碼) 9&5=1
  
00001001&00000101=00000001   位數不對稱可補碼;
  
254&1=254
  
11111110&00000001=11111110
  
“&&”  邏輯與
  
判斷兩個表達式的真假性,只有兩個表達式同時為真才為真,有一個為假則為假
  
a=1;b=0; a&&b
  
a&&b a和b都為真時  式子才返回true,否則就返回false
|
  
||
  
(或)
“|”  (有1時,結果是1,都是0時,結果為0)
  
參加運算的兩個對象,按二進制位進行“或”運算
  
運算規則:0|0=0;   0|1=1;   1|0=1;    1|1=1;
  
    即 :參加運算的兩個對象只要有一個為1,其值為1。
  
例如:3|5 即 0000 0011 | 0000 0101 = 0000  0111   因此,3|5的值得7。
  
||”
  
a||b ,只有在前一個條件a為假,才會去判斷條件b ;若條件a為真,則條件b不會執行
  
a||b ,a或者b有一個為真時,式子就返回true,都為就假才返回false。
<<
  
(左移)
左移運算符是用來將一個數的各二進制位左移若干位,移動的位數由右操作數指定(右操作數必須是非負值),其右邊空出的位用0填補,高位左移溢出則舍棄該高位。按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。
  
格式:需要移位的數字 << 移位的次數
  
例如:3<<2; 3轉換為二進制是0011,所有數字左移2個位置,空位補0,得到1100,即十進制數12。

  
>>
  
(右移)
右移運算符是用來將一個數的各二進制位右移若干位,移動的位數由右操作數指定(右操作數必須是非負值),移到右端的低位被舍棄,對于無符號數,高位補0。對于有符號數,某些機器將對左邊空出的部分用符號位填補(即“算術移位”),而另一些機器則對左邊空出的部分用0填補(即“邏輯移位”)。
  
按二進制把所有的數字向右移動對應位移位數,低位移出(舍棄),高位的空位補符號位(正數補零,負數補1)。
  
格式:需要移位的數字 >> 移位的次數
  
例如:11 >> 2    1011>>2=0010;
  
11的二進制為1011,所有數向右移2個位置,因為11是正數,所以高位補0,得0010,是十進制的2。
  
注意:對無符號數,右移時左邊高位移入0;對于有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決于所用的計算機系統。有的系統移入0,有的系統移入1。移入0的稱為“邏輯移位”,即簡單移位;移入1的稱為“算術移位”。
  
提醒:
  
移位運算符是位操作運算符的一種。移位運算符可以在二進制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種:<<(左移)、>>(帶符號右移)和>>>(無符號右移)。
  
數學意義:
  
1、在數字沒有溢出的前提下,對于正數和負數,左移一位都相當于乘以2的1次方,左移n位就相當于乘以2的n次方。
  
2、右移一位相當于除2,右移n位相當于除以2的n次方。
^
參加運算的兩個數據,按二進制位進行“異或”運算。
  
運算規則:0^0=0;   0^1=1;   1^0=1;   1^1=0;
  
   即:參加運算的兩個對象,如果兩個相應位為“異”(值不同),則該位結果為1,否則為 0。
  
“異或運算”的特殊作用:
  
(1)使特定位翻轉 找一個數,對應X要翻轉的各位,該數的對應位為1,其余位為零,此數與X對應位異或即可。
  
  
例:X=10101110,使X低4位翻轉,用X ^ 0000 1111 = 1010 0001即可得到。
  
~
  
“~”按位取反(二進制數)
  
位運算符將數字視為二進制值,并按位進行相應運算,運算完成后再重新轉換為數字。對于整形變量,對每一個二進制位進行取反,0變1,1變0。
  
“!”:是邏輯運算符,用于從左到右求表達式的真值。
  







C語言的32個關鍵字可以分為以下4類:

1 、數據類型關鍵字(12個):
(1) char :聲明字符型變量或函數
(2) double :聲明雙精度變量或函數
(3) enum :聲明枚舉類型
(4) float:聲明浮點型變量或函數
(5) int: 聲明整型變量或函數
(6) long :聲明長整型變量或函數
(7) short :聲明短整型變量或函數
(8) signed:聲明有符號類型變量或函數
(9) struct:聲明結構體變量或函數
(10) union:聲明共用體(聯合)數據類型
(11) unsigned:聲明無符號類型變量或函數
(12) void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)
2、控制語句關鍵字(12個):
A循環語句
(1) for:一種循環語句
(2) do :循環語句的循環體
(3) while :循環語句的循環條件
(4) break:跳出當前循環
(5) continue:結束當前循環,開始下一輪循環
B條件語句
(1)if: 條件語句
(2)else :條件語句否定分支(與if 連用)
(3)goto:無條件跳轉語句
C開關語句
(1)switch :用于開關語句
(2)case:開關語句分支
(3)default:開關語句中的“其他”分支
D返回語句
return :子程序返回語句(可以帶參數,也可不帶參數)
3 、存儲類型關鍵字(4個):
(1)auto :聲明自動變量 一般不使用
(2)extern:聲明變量是在其他文件正聲明(也可以看做是引用變量)
(3)register:聲明寄存器變量
(4)static :聲明靜態變量
4 、其它關鍵字(4個):
(1)const :聲明只讀變量
(2)sizeof:計算數據類型長度
(3)typedef:用以給數據類型取別名
(4)volatile:說明變量在程序執行中可被隱含地改變


二、用途
按位與的用途
1.清零
若想對一個存儲單元清零,即使其全部二進制位為0,只要對這個存儲單元當前的值取反(也就是原來的數中為1變為0,0變為1),然后使二者進行&運算,即可達到清零目的。
比如a=23,b=~a:
a:00010111
b:11101000
a&b:00000000
2.取一個數中某些指定位
比如a=23,我想取a的二進制的后面4位數,那么可以找一個后4位是1其余位是0的數b,即b=0x0f(十六進制,轉換為二進制為00001111),a&b就得到了a的后四位。
a:00010111
b:00001111
a&b:00000111
3.保留指定位
比如a=23(用8bit表示),我想保留其二進制的第4和第6位(最左邊為第1位),其余位置0。那么可以找一個第4和第6位是1其余位是0的數b與a進行按位與運算
a:00010111
b:00010100
a&b:00010100
按位或的用途
常用來對一個數的某些位置1,其余位不變。比如a=23,我想將其第2和第3位置為1,可以找一個第2、3位是1其余位是0的數與a進行按位或運算。
a:00010111
b:01100000
a|b:01110111
三、項目實例
在實際項目中,很多時候&和|都是和>>、<<配合使用的。比如在藍牙項目開發中,2個設備之間進行日期數據傳輸時,我們先定一個協議,用4個byte來表示一個日期,其中byte0表示年份的高位數,byte1表示年份的低位數,byte2表示月份,byte3表示日期。
設備端現在收到另外一臺設備傳過來的日期數據00010100 00010011 0000011000011101(為了閱讀方便我將每個byte之間用空格分開)。那么我要如何解析這個數據來得到實際日期呢?
/*
*第一步,獲取日期。
*日期是最后一個byte,也就是最后8位,用一個后8位是1其余位是0的數(11111111,十六進制表示是0xff)與數據進行按位與計算即可
*/
date = 00010100 00010011 00000110 00011101;
day = date & 0xff;(計算結果是00011101,十進制表示是29,也就是日期是29)。

/*
*第二步,獲取月份。
*月份是倒數第2個byte,此時需要先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算
*下面代碼可以簡寫成date=date>>8&0xff;
*/
date = date>>8; (計算結果是00010100 00010011 00000110)
month = date & 0xff;(計算結果是00000110,十進制表示是6,也就是月份是6月)。

/*
*第三步,獲取年份低位。
*先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算
*下面代碼可以簡寫成date=date>>8&0xff;
*/
date = date>>8; (計算結果是00010100 00010011)
year_low = date & 0xff;(計算結果是00010011,十進制表示是19)。

/*
*第四步,獲取年份高位。
*先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算
*下面代碼可以簡寫成date=date>>8&0xff;
*/
date = date>>8; (計算結果是00010100)
year_heigh = date & 0xff;(計算結果是00010011,十進制表示是20)。
最后將4個數拼起來就得到日期為2019年6月29日。

完整的Word格式文檔51黑下載地址:
運算符的含義.docx (98.53 KB, 下載次數: 43)






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人免费看片又大又黄 | 日韩美女在线看免费观看 | 国产精品日韩欧美一区二区三区 | 免费看色 | 伊人精品在线 | 国产一区二区 | 久久天堂网 | 免费黄色av网站 | 久久久成人免费一区二区 | 亚洲欧美中文字幕 | 亚洲高清在线观看 | 成人午夜视频在线观看 | 99re国产视频 | 毛片免费看 | 奇米久久久 | 精区3d动漫一品二品精区 | 午夜激情影院 | 凹凸日日摸日日碰夜夜 | 国产成人精品免高潮在线观看 | 精品福利av导航 | 国产91视频免费 | 91精品国产自产在线老师啪 | 日韩aⅴ在线观看 | 国产精品国产三级国产aⅴ无密码 | 午夜视频一区二区 | 午夜av在线| 午夜激情影院 | 亚洲欧美中文日韩在线v日本 | 一区二区视屏 | 欧美成年网站 | 成人小视频在线观看 | 欧一区二区 | 99福利视频 | 成人在线不卡 | 精品国产一区二区三区久久 | 91久久北条麻妃一区二区三区 | 91视频官网| 国产精品久久欧美久久一区 | 91精品国产91久久久久久 | 一级做a爰片性色毛片16 | 成人国产精品久久久 |