C語言 位運(yùn)算

###位運(yùn)算的邏輯:

1:(位與)運(yùn)算符(&):雙目操作符,當(dāng)兩個位進(jìn)行相與時仍翰,只有兩者都為“1”時結(jié)果才為“1”(即:全真為真赫粥,一假為假),運(yùn)算規(guī)則如下:

左運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ?右運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ?&運(yùn)算結(jié)果

? ? 0 ? ? ? ? ? ? ? ? ? ?& ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ?0

? ? 0 ? ? ? ? ? ? ? ? ? ?& ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ?0

? ? 1 ? ? ? ? ? ? ? ? ? ?& ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 0

? ? 1 ? ? ? ? ? ? ? ? ? ?& ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? 1

運(yùn)算:

例:

#include ?<stdio.h>

int main(int ? ? argc,char ? ?*crgv[]){

? ? unsigned ? ? ? ? ? ?char ? ?x=0156, ? ?y=0xaf, ? z;

z=x&y;

printf("%d",z)

}

結(jié)果為:0x2e

運(yùn)算過程:0156(8進(jìn)制)==0000 0110 1110(2進(jìn)制)予借;

進(jìn)行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?&(位與運(yùn)算)

? ? ? ? ? ? ? ? ? ? 0xaf(16進(jìn)制) ? ? ==0000 1010 ? ?1111(2進(jìn)制)越平;

結(jié)果:0000 ? ?0010 ? ?1110(2進(jìn)制)==0x2e(十六進(jìn)制)频蛔;


2:位或運(yùn)算符(|):

雙目操作符,當(dāng)兩個 位 ?進(jìn)行相或時秦叛,兩者中只要有一方為“1”晦溪,結(jié)果就為“1”(即:一真為真,兩假為假)挣跋,運(yùn)算規(guī)則如下:

? ? 左運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ? ? ?右運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ? ? (|) 運(yùn)算結(jié)果

? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ?0

? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ?1

? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1

? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1

例:

#include <stdio.h>

int main(int argv,char ?*argc[]){

unsigned char x=027,y=0x75;

z=x|y;

}

運(yùn)行過程:

027(8進(jìn)制)=0001 ? 0111(2進(jìn)制)

進(jìn)行 ? ? ? ? ? ? ? ? ? ?|(位或運(yùn)算)

0x75(16進(jìn)制)=0111 ? ?0101(2進(jìn)制)

結(jié)果:0111 ? 0111(2進(jìn)制)=0x77(16進(jìn)制)


3.異或運(yùn)算(^):

? ? 當(dāng)兩個位進(jìn)行異或時三圆,只要兩者相同,結(jié)果為“0”避咆,否者結(jié)果為“1”舟肉,(即:同假異真)運(yùn)算規(guī)則如下:

左運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ? ? ?右運(yùn)算量 ? ? ? ? ? ? ? ? ? ? ? ? ? (^) 運(yùn)算結(jié)果

? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?^ ? ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ?0

? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?^ ? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? ? ?0

? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?^ ? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ?1

? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?^ ? ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1

例:

#include

int main(int argv,char ?*argc[]){

unsigned(無符號) ? ? char ? ?x=25,y=0263,z;

z=x^y;

printf("%d\n",z);

}

運(yùn)算過程:

25(十進(jìn)制)=0001 ? ?1001(二進(jìn)制)

運(yùn)算 ? ? ? ? ? ? ? ? ? ?^(異或運(yùn)算)

0263(8進(jìn)制)=1011 ? ?0011(二進(jìn)制)

結(jié)果:1010 ? ? 1010(二進(jìn)制)=0252(8進(jìn)制)


4:移位操作符(“<<” ? 或 ? ">>"):位移位運(yùn)算的一般形式:<運(yùn)算量><運(yùn)算符><表達(dá)式>;

<運(yùn)算量>必須為整型結(jié)果數(shù)值:

<運(yùn)算符>為左移位(<<)或 右移位(>>)運(yùn)算查库;

<表達(dá)式>也必須為整型結(jié)果數(shù)值路媚;

移位操作就是把一個數(shù)值左移或右移若干位;假如左移n位膨报,原來值最左邊的n位數(shù)被丟掉磷籍,右邊n衛(wèi)補(bǔ)“0” ;右移操作就是和左移操作移動方向相反现柠;

符號位的處理方法:

(1):邏輯移位院领,不考慮符號問題,原數(shù)值右移n位后够吩,左邊空出的n歌位置比然,用0填充;

(2):算術(shù)移位周循,原來值進(jìn)行了右移操作后强法,需要保證符號位不變,因此湾笛,右移n位后饮怯,左邊空出的n個位置,用原數(shù)值的符號位填充嚎研。原來若是負(fù)數(shù)蓖墅,則符號位為“1”,填充的位也是“1”临扮;原來若是正數(shù)论矾,則符號位為“0”,填充的位也是“0”杆勇,這樣保證移位后的數(shù)據(jù)與原數(shù)正負(fù)相同贪壳;

例:“1000 ? 1001”將其右移兩位,邏輯移位的結(jié)果為“0010 ?0010”蚜退,算術(shù)移位為:“1110 ?0010”闰靴;

將其左移兩位彪笼,邏輯移位和算術(shù)移位的結(jié)果為:“0010 ?0100”;

(3)***補(bǔ)充:特定位清零(由“1”變成“0”)用 位與 ?操作传黄;特定位變“1”(由“0”變成“1”)用 ?位或操作杰扫;

例:

a队寇、請把0xd5的第2位進(jìn)行清零操作

0xd5=1101 0101=>1101 0001

? ? 1111 1011

? ? ~0000 0100

? ? =0000 0001<<2

? ~(0x01<<2)&0xd5

b膘掰、請把0xed的第3位進(jìn)行清零操作

0xed=1110 1101=>1110 0101

? ? 1111 0111

? ? ~

? ? 0000 1000

=? ? 0000 0001<<3

? ? ~(0x01<<3)&0xed

c、請把0x7d的第2-4位進(jìn)行清零

0x7d=0111 1101=>0110 0001

? ? 1110 0011

? ? ~

? ? 0001 1100

=

? ? 0000 0111<<2

~(0x07)&0x7d

d佳遣、請把0x7d的第2位和第3位進(jìn)行清零

0x7d=0111 1101=>0111 0001

? ? 1111 0011

~

? ? 0000 1100

? ? 0000 0011<<2

~(0x03<<2)&0x7d

e识埋、請把0xc7的第4位進(jìn)行置1

0xc7=1100 0111=>1101 0111

? ? 0001 0000

? ? =0000 0001<<4

=~(0x01<<4)|0xc7

f、請把0x87的第3位進(jìn)行置1?

0x87=1000 0111=>1000 1111

? ? 0000 1000

~(0x01<<3)|0x87

g零渐、請把0xc7的第3—5位置1

0xc7=1100 0111=>1111 1111

? ? 0011 1000

? ? 0000 0111<<3

~(0x07<<3)|0x87

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窒舟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诵盼,更是在濱河造成了極大的恐慌惠豺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件风宁,死亡現(xiàn)場離奇詭異洁墙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戒财,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門热监,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饮寞,你說我怎么就攤上這事孝扛。” “怎么了幽崩?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵苦始,是天一觀的道長。 經(jīng)常有香客問我慌申,道長陌选,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任太示,我火速辦了婚禮柠贤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘类缤。我一直安慰自己臼勉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布餐弱。 她就那樣靜靜地躺著宴霸,像睡著了一般囱晴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓢谢,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天畸写,我揣著相機(jī)與錄音,去河邊找鬼氓扛。 笑死枯芬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的采郎。 我是一名探鬼主播千所,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒜埋!你這毒婦竟也來了淫痰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤整份,失蹤者是張志新(化名)和其女友劉穎待错,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈评,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡火俄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了础倍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烛占。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沟启,靈堂內(nèi)的尸體忽然破棺而出忆家,到底是詐尸還是另有隱情,我是刑警寧澤德迹,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布芽卿,位于F島的核電站,受9級特大地震影響胳搞,放射性物質(zhì)發(fā)生泄漏卸例。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一肌毅、第九天 我趴在偏房一處隱蔽的房頂上張望筷转。 院中可真熱鬧,春花似錦悬而、人聲如沸呜舒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袭蝗。三九已至唤殴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間到腥,已是汗流浹背朵逝。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乡范,地道東北人配名。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像篓足,于是被迫代替她去往敵國和親段誊。 傳聞我的和親對象是個殘疾皇子闰蚕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容