C語言運(yùn)算
引導(dǎo)語:數(shù)學(xué)上,數(shù)學(xué)上,運(yùn)算是一種行為。而在C語言中,運(yùn)算也有優(yōu)先級(jí)之分,以下是百分網(wǎng)小編分享給大家的C語言運(yùn)算,歡迎閱讀學(xué)習(xí)!
一、 位運(yùn)算的含義及應(yīng)用
1.位的概念
大多數(shù)計(jì)算機(jī)系統(tǒng)的內(nèi)存儲(chǔ)器是由眾多的存儲(chǔ)單元構(gòu)成的。在微機(jī)中,每個(gè)存儲(chǔ)單元是1個(gè)字節(jié),它由8位二進(jìn)制數(shù)構(gòu)成,可以表示28=256種信息,各位的編號(hào)從0~7,最左邊的位(第7位)是最高位,最右邊的位(第0位)是最低位。由于二進(jìn)制本身的特點(diǎn),各位上的數(shù)字不是1,就是0。
本章中的位就是指上述提到的二進(jìn)制位,本章中的位運(yùn)算就是指對(duì)這些二進(jìn)制的位進(jìn)行邏輯運(yùn)算、移位運(yùn)算等操作。
2.數(shù)的編碼
數(shù)在計(jì)算機(jī)中是以二進(jìn)制表示的,但是它并不是簡(jiǎn)單地以它本身的數(shù)值的二進(jìn)制形式來直接表示,而要進(jìn)行一定的編碼,以方便計(jì)算機(jī)進(jìn)行處理。常用的編碼有原碼、反碼、補(bǔ)碼三種。
3.真值與原碼
我們將一個(gè)十進(jìn)制數(shù)的二進(jìn)制表示稱為這個(gè)十進(jìn)制數(shù)的真值,它代表了這個(gè)十進(jìn)制數(shù)本身的數(shù)值。下表列出了一些數(shù)的真值。
真值舉例
數(shù) 二進(jìn)制表示 真值(16位)
0
1?
7 0
1?
111 0000000000000000
0000000000000001?
0000000000000111 ?
15? ?
1111? ?
0000000000001111?
255?
4095?
65535 11111111?
111111111111?
1111111111111111 0000000011111111?
0000111111111111?
1111111111111111
用真值表示的數(shù)只能是正數(shù),對(duì)于負(fù)數(shù),要用“一”號(hào)標(biāo)明,例如:
-7的真值為-0000000000000111-65535的真值為-1111111111111111
這勢(shì)必造成用計(jì)算機(jī)表示數(shù)時(shí)的不便,故引入了原碼表示法。
在原碼表示法中,最高位代表符號(hào)位,用“1”表示負(fù)數(shù),“0”表示正數(shù);余下的數(shù)位用來表示真值的絕對(duì)值。
數(shù)字零存在著兩種表示方法:+0與-0。
4.反碼
若采用反碼表示,則對(duì)應(yīng)的原碼應(yīng)按照以下方法進(jìn)行轉(zhuǎn)換:
(1)如果真值為正,則它的反碼與原碼相同;
(2)如果真值為負(fù),則反碼的符號(hào)位為1,其余各位就是對(duì)原碼取反(即原碼的1變?yōu)?,原碼的0變?yōu)?)。
5.補(bǔ)碼
(1)為什么要引入補(bǔ)碼
補(bǔ)碼具有許多獨(dú)特的優(yōu)點(diǎn):首先它可以變減法運(yùn)算為加法運(yùn)算,使得計(jì)算時(shí)步驟統(tǒng)一,速度提高;其次,在這種系統(tǒng)下的“0”只有惟一的一種表示方法,這就是現(xiàn)代的計(jì)算機(jī)系統(tǒng)中大多采用補(bǔ)碼的原因。
(2)補(bǔ)碼的規(guī)定
①正數(shù)的原碼、補(bǔ)碼、反碼均相同;
②計(jì)算負(fù)數(shù)的補(bǔ)碼時(shí),先置符號(hào)位為1,再對(duì)剩余原碼的位數(shù)逐位取反,最后對(duì)整個(gè)數(shù)加1。
在微機(jī)上以8位二進(jìn)制數(shù)為一字節(jié)的存儲(chǔ)單元中采用補(bǔ)碼系統(tǒng),它可以存放的最小整數(shù)為-128,最大整數(shù)為+127。若采用兩個(gè)字節(jié)來表示一個(gè)整數(shù),則可表示的最小整數(shù)為-32768,最大整數(shù)為+32767。
二、 簡(jiǎn)單的位運(yùn)算
C語言提供了位(bit)運(yùn)算的功能,這使它像匯編語言一樣用來編寫系統(tǒng)程序。位運(yùn)算符共有六種;
位運(yùn)算符
位運(yùn)算符 含義
& 位與
︳ 位或
∧ 位異或
~ 位取反
<< 位左移
>> 位右移
本節(jié)介紹前四種運(yùn)算,即位的邏輯運(yùn)算。
1.按位與運(yùn)算
①概念
“按位與”運(yùn)算符“&”是雙目運(yùn)算符,其功能是將參與運(yùn)算兩數(shù)的各對(duì)應(yīng)二進(jìn)位相與。只能對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1,否則為0。
②“按位與”與運(yùn)算的特殊用途
ⅰ.清零
如果想將一個(gè)存儲(chǔ)單元清零,即使其全部二進(jìn)位為0,可按這樣的方法計(jì)算:
找一個(gè)數(shù),它的補(bǔ)碼形式中各位的值符合如下條件:原來的數(shù)中為1的位,新數(shù)中相應(yīng)位為0(注意,并不要求原數(shù)為0的位上,新數(shù)相應(yīng)位為1,新數(shù)相應(yīng)位可以是0或1);對(duì)二者進(jìn)行&運(yùn)算。
ⅱ.取一個(gè)數(shù)中某些字節(jié)
對(duì)于一個(gè)整數(shù)a(占2個(gè)字節(jié)),如要想得到其中的低字節(jié),只需將a與特定的一個(gè)數(shù)按位與即可。
③要想將一個(gè)數(shù)的某一位保留下來,可將該數(shù)與一個(gè)特定的數(shù)進(jìn)行&處理。
2.按位或運(yùn)算
“按位或”運(yùn)算符“︳”是雙目運(yùn)算符,其功能是將參與運(yùn)算兩數(shù)的各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的兩個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。參與運(yùn)算的整數(shù)均以補(bǔ)碼出現(xiàn)。
3.按位異或運(yùn)算
①概念
“按位異或”運(yùn)算符“∧”是雙目運(yùn)算符,其功能是將參與運(yùn)算兩數(shù)的各對(duì)應(yīng)位相異或,當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1,否則為0。參與運(yùn)算整數(shù)仍以補(bǔ)碼出現(xiàn)。
②“異或”運(yùn)算的特殊應(yīng)用
ⅰ.使特定位翻轉(zhuǎn)
ⅱ.與0相“異或”,保留原值。
ⅲ.交換兩個(gè)值。
4.“取反”運(yùn)算
“~”是一個(gè)一元運(yùn)算符,即它的運(yùn)算量只有一個(gè),用來對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即將0變1,1變0。比如說,~025就是對(duì)八進(jìn)制數(shù)25(即二進(jìn)制數(shù)000000000010101)按位求反。
15.3 移位運(yùn)算
1.移位運(yùn)算符
移位運(yùn)算是對(duì)操作數(shù)以二進(jìn)制位為單位進(jìn)行左移或右移。
移位操作
運(yùn)算符 名 稱 例 子 運(yùn)算功能
>> 右移位 b>>3 b右移3位
<< 左移位 c<<2 c左移2位
2.左移運(yùn)算
左移運(yùn)算符“<<”是雙目運(yùn)算符,其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。例如;
a<<4
就把a(bǔ)的各二進(jìn)位向左移動(dòng)4位。如a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。
3.右移運(yùn)算
右移運(yùn)算符“>>”是雙目運(yùn)算符,其功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。例如:
a=15,a>>2
表示把000001111右移為00000011(十進(jìn)制3)。應(yīng)該說明的是,對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0;而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0或1取決于編譯系統(tǒng)的規(guī)定。Turbo C 規(guī)定補(bǔ)1。
右移運(yùn)算相當(dāng)于將運(yùn)算對(duì)象除2.
1.4 位賦值運(yùn)算
位賦值運(yùn)算符。
位賦值運(yùn)算符
運(yùn)算符 名 稱 例 子 等價(jià)于
&= 位與賦值 a&=b a=2&b
︳= 位或賦值 a|=b a=a|b
∧= 位異或賦值 a∧=b a=a∧b
>>= 右移賦值 a>>b a=a>>b
<<= 左移賦值 a<<=b a=a<
位賦值運(yùn)算的過程為:
(1)先對(duì)兩個(gè)操作數(shù)進(jìn)行位操作;
(2)然后把結(jié)果賦予第一個(gè)操作數(shù),因此第一個(gè)操作數(shù)必須是變量。
位賦值運(yùn)算與算術(shù)賦值運(yùn)算相似,它們都統(tǒng)稱復(fù)合賦值運(yùn)算。
【C語言運(yùn)算】相關(guān)文章:
C語言的位運(yùn)算05-31
C語言位運(yùn)算10-28
c語言算術(shù)運(yùn)算符07-23
C語言的條件運(yùn)算符12-19
C語言加減乘除運(yùn)算09-22
C語言位運(yùn)算基礎(chǔ)知識(shí)02-20
C語言和C++的分別06-18
C語言的結(jié)構(gòu)10-14
C語言考點(diǎn)精選06-29