| “&” (都為1時,結(jié)果是1,否則是0) 按位與,將兩個二進制的數(shù)逐位相與,結(jié)果是相與之后的結(jié)果 如果兩個相應(yīng)的二進制位都為1,則該位的結(jié)果值為1,否則為0。 | 運算規(guī)則:0&0=0; 0&1=0; 1&0=0; 1&1=1; 例如:9&5可寫算式如下:(9的二進制補碼)&(5的二進制補碼) 9&5=1 00001001&00000101=00000001 位數(shù)不對稱可補碼; 254&1=254 11111110&00000001=11111110 “&&” 邏輯與 判斷兩個表達式的真假性,只有兩個表達式同時為真才為真,有一個為假則為假 a=1;b=0; a&&b a&&b a和b都為真時 式子才返回true,否則就返回false | | “|” (有1時,結(jié)果是1,都是0時,結(jié)果為0) 參加運算的兩個對象,按二進制位進行“或”運算 運算規(guī)則: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不會執(zhí)行 a||b ,a或者b有一個為真時,式子就返回true,都為就假才返回false。 | | 左移運算符是用來將一個數(shù)的各二進制位左移若干位,移動的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負值),其右邊空出的位用0填補,高位左移溢出則舍棄該高位。按二進制形式把所有的數(shù)字向左移動對應(yīng)的位數(shù),高位移出(舍棄),低位的空位補零。 格式:需要移位的數(shù)字 << 移位的次數(shù) 例如:3<<2; 3轉(zhuǎn)換為二進制是0011,所有數(shù)字左移2個位置,空位補0,得到1100,即十進制數(shù)12。
51hei.png (44.06 KB, 下載次數(shù): 107)
下載附件
2020-3-31 14:15 上傳
| | 右移運算符是用來將一個數(shù)的各二進制位右移若干位,移動的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負值),移到右端的低位被舍棄,對于無符號數(shù),高位補0。對于有符號數(shù),某些機器將對左邊空出的部分用符號位填補(即“算術(shù)移位”),而另一些機器則對左邊空出的部分用0填補(即“邏輯移位”)。 按二進制把所有的數(shù)字向右移動對應(yīng)位移位數(shù),低位移出(舍棄),高位的空位補符號位(正數(shù)補零,負數(shù)補1)。 格式:需要移位的數(shù)字 >> 移位的次數(shù) 例如:11 >> 2 1011>>2=0010; 11的二進制為1011,所有數(shù)向右移2個位置,因為11是正數(shù),所以高位補0,得0010,是十進制的2。 注意:對無符號數(shù),右移時左邊高位移入0;對于有符號的值,如果原來符號位為0(該數(shù)為正),則左邊也是移入0。如果符號位原來為1(即負數(shù)),則左邊移入0還是1,要取決于所用的計算機系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯移位”,即簡單移位;移入1的稱為“算術(shù)移位”。
|
提醒: 移位運算符是位操作運算符的一種。移位運算符可以在二進制的基礎(chǔ)上對數(shù)字進行平移。按照平移的方向和填充數(shù)字的規(guī)則分為三種:<<(左移)、>>(帶符號右移)和>>>(無符號右移)。 數(shù)學意義: 1、在數(shù)字沒有溢出的前提下,對于正數(shù)和負數(shù),左移一位都相當于乘以2的1次方,左移n位就相當于乘以2的n次方。 2、右移一位相當于除2,右移n位相當于除以2的n次方。 | | 參加運算的兩個數(shù)據(jù),按二進制位進行“異或”運算。 運算規(guī)則:0^0=0; 0^1=1; 1^0=1; 1^1=0; 即:參加運算的兩個對象,如果兩個相應(yīng)位為“異”(值不同),則該位結(jié)果為1,否則為 0。 “異或運算”的特殊作用: (1)使特定位翻轉(zhuǎn) 找一個數(shù),對應(yīng)X要翻轉(zhuǎn)的各位,該數(shù)的對應(yīng)位為1,其余位為零,此數(shù)與X對應(yīng)位異或即可。
例:X=10101110,使X低4位翻轉(zhuǎn),用X ^ 0000 1111 = 1010 0001即可得到。
| | “~”按位取反(二進制數(shù)) 位運算符將數(shù)字視為二進制值,并按位進行相應(yīng)運算,運算完成后再重新轉(zhuǎn)換為數(shù)字。對于整形變量,對每一個二進制位進行取反,0變1,1變0。 “!”:是邏輯運算符,用于從左到右求表達式的真值。 |
|
|
|
|
C語言的32個關(guān)鍵字可以分為以下4類:
1 、數(shù)據(jù)類型關(guān)鍵字(12個): (1) char :聲明字符型變量或函數(shù) (2) double :聲明雙精度變量或函數(shù) (3) enum :聲明枚舉類型 (4) float:聲明浮點型變量或函數(shù) (5) int: 聲明整型變量或函數(shù) (6) long :聲明長整型變量或函數(shù) (7) short :聲明短整型變量或函數(shù) (8) signed:聲明有符號類型變量或函數(shù) (9) struct:聲明結(jié)構(gòu)體變量或函數(shù) (10) union:聲明共用體(聯(lián)合)數(shù)據(jù)類型 (11) unsigned:聲明無符號類型變量或函數(shù) (12) void :聲明函數(shù)無返回值或無參數(shù),聲明無類型指針(基本上就這三個作用) 2、控制語句關(guān)鍵字(12個): A循環(huán)語句 (1) for:一種循環(huán)語句 (2) do :循環(huán)語句的循環(huán)體 (3) while :循環(huán)語句的循環(huán)條件 (4) break:跳出當前循環(huán) (5) continue:結(jié)束當前循環(huán),開始下一輪循環(huán) B條件語句 (1)if: 條件語句 (2)else :條件語句否定分支(與if 連用) (3)goto:無條件跳轉(zhuǎn)語句 C開關(guān)語句 (1)switch :用于開關(guān)語句 (2)case:開關(guān)語句分支 (3)default:開關(guān)語句中的“其他”分支 D返回語句 return :子程序返回語句(可以帶參數(shù),也可不帶參數(shù)) 3 、存儲類型關(guān)鍵字(4個): (1)auto :聲明自動變量 一般不使用 (2)extern:聲明變量是在其他文件正聲明(也可以看做是引用變量) (3)register:聲明寄存器變量 (4)static :聲明靜態(tài)變量 4 、其它關(guān)鍵字(4個): (1)const :聲明只讀變量 (2)sizeof:計算數(shù)據(jù)類型長度 (3)typedef:用以給數(shù)據(jù)類型取別名 (4)volatile:說明變量在程序執(zhí)行中可被隱含地改變
二、用途 按位與的用途 1.清零 若想對一個存儲單元清零,即使其全部二進制位為0,只要對這個存儲單元當前的值取反(也就是原來的數(shù)中為1變?yōu)?,0變?yōu)?),然后使二者進行&運算,即可達到清零目的。
比如a=23,b=~a: a:00010111 b:11101000 a&b:00000000 2.取一個數(shù)中某些指定位 比如a=23,我想取a的二進制的后面4位數(shù),那么可以找一個后4位是1其余位是0的數(shù)b,即b=0x0f(十六進制,轉(zhuǎn)換為二進制為00001111),a&b就得到了a的后四位。 a:00010111 b:00001111 a&b:00000111 3.保留指定位 比如a=23(用8bit表示),我想保留其二進制的第4和第6位(最左邊為第1位),其余位置0。那么可以找一個第4和第6位是1其余位是0的數(shù)b與a進行按位與運算 a:00010111 b:00010100 a&b:00010100 按位或的用途 常用來對一個數(shù)的某些位置1,其余位不變。比如a=23,我想將其第2和第3位置為1,可以找一個第2、3位是1其余位是0的數(shù)與a進行按位或運算。 a:00010111 b:01100000 a|b:01110111 三、項目實例 在實際項目中,很多時候&和|都是和>>、<<配合使用的。比如在藍牙項目開發(fā)中,2個設(shè)備之間進行日期數(shù)據(jù)傳輸時,我們先定一個協(xié)議,用4個byte來表示一個日期,其中byte0表示年份的高位數(shù),byte1表示年份的低位數(shù),byte2表示月份,byte3表示日期。
設(shè)備端現(xiàn)在收到另外一臺設(shè)備傳過來的日期數(shù)據(jù)00010100 00010011 0000011000011101(為了閱讀方便我將每個byte之間用空格分開)。那么我要如何解析這個數(shù)據(jù)來得到實際日期呢? /* *第一步,獲取日期。 *日期是最后一個byte,也就是最后8位,用一個后8位是1其余位是0的數(shù)(11111111,十六進制表示是0xff)與數(shù)據(jù)進行按位與計算即可 */ date = 00010100 00010011 00000110 00011101; day = date & 0xff;(計算結(jié)果是00011101,十進制表示是29,也就是日期是29)。
/* *第二步,獲取月份。 *月份是倒數(shù)第2個byte,此時需要先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算 *下面代碼可以簡寫成date=date>>8&0xff; */ date = date>>8; (計算結(jié)果是00010100 00010011 00000110) month = date & 0xff;(計算結(jié)果是00000110,十進制表示是6,也就是月份是6月)。
/* *第三步,獲取年份低位。 *先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算 *下面代碼可以簡寫成date=date>>8&0xff; */ date = date>>8; (計算結(jié)果是00010100 00010011) year_low = date & 0xff;(計算結(jié)果是00010011,十進制表示是19)。
/* *第四步,獲取年份高位。 *先將最后一個byte砍掉(也就是右移8位),然后再和0xff進行按位與運算 *下面代碼可以簡寫成date=date>>8&0xff; */ date = date>>8; (計算結(jié)果是00010100) year_heigh = date & 0xff;(計算結(jié)果是00010011,十進制表示是20)。 最后將4個數(shù)拼起來就得到日期為2019年6月29日。
完整的Word格式文檔51黑下載地址:
運算符的含義.docx
(98.53 KB, 下載次數(shù): 43)
2020-3-31 13:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|