欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇帶你了解C語(yǔ)言--位操作詳情

 更新時(shí)間:2021年08月12日 17:27:39   作者:Sauron7i  
這篇文章主要介紹了關(guān)于C語(yǔ)言位運(yùn)算的簡(jiǎn)單示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在C語(yǔ)言中,是可以單獨(dú)操控變量中的位的。因?yàn)镃在提供高級(jí)語(yǔ)言便利的同時(shí),還能在為匯編語(yǔ)言所保留的級(jí)別上工作。

二進(jìn)制數(shù)、位和字節(jié)

在我們?nèi)粘I钪型ǔJ褂玫氖M(jìn)制。

例如數(shù)字1234可以寫(xiě)成:

1 *10e3 + 2 * 10e2 + 3 * 10e1 + 4 * 10e0

這種方法是基于10的冪,所以稱為以10為基底書(shū)寫(xiě)的。

那么以2為基底表示的數(shù)字就是二進(jìn)制數(shù)。

例如:二進(jìn)制數(shù)1111

1 * 2e3 + 1 * 2e2 + 1 * 2e1 + 1 * 2

轉(zhuǎn)換成十進(jìn)制就是:

1* 8+1* 4+1*2+1 = 15

二進(jìn)制整數(shù)

C語(yǔ)言用字節(jié)表示存儲(chǔ)系統(tǒng)字符集所需的大小,通常1字節(jié)為8位。

可以從左往右給這8位分別編號(hào) 7~0。在一字節(jié)中,編號(hào)是7的位被稱為高階位,編號(hào)為0的被稱為低階位,每一位的編號(hào)對(duì)應(yīng)2的相應(yīng)指數(shù)。

在這里插入圖片描述

該字節(jié)能表示的最大的數(shù)字是把所有位設(shè)置為1:1111 1111,其值為255。最小值就是:0000 0000,其值為0。

所以1字節(jié)可以存儲(chǔ)0~255范圍內(nèi)的數(shù)字總共256個(gè)值,在ASCII碼中對(duì)應(yīng)了256個(gè)狀態(tài)。

unsigned char用1字節(jié)表示的范圍是0~255,而signed char 用1字節(jié)表示范圍是-128 ~ 127。

有符號(hào)整數(shù)

表示有符號(hào)數(shù)最簡(jiǎn)單的方式是用1位(高階位)存儲(chǔ)符號(hào),剩下7位表示數(shù)字。
用這種符號(hào)量表示法,1000 0001表示 -1、0000 0001表示 1。其表示范圍是 -127~127。這種方法的缺點(diǎn)是有兩個(gè)0,+0和-0,有點(diǎn)浪費(fèi)。

二進(jìn)制補(bǔ)碼方法避免了這個(gè)問(wèn)題。以一字節(jié)為例:
二進(jìn)制補(bǔ)碼用1字節(jié)中的后7位表示0~127,高階位設(shè)置為0.如果高階位是1,表示的是負(fù)數(shù)。 假設(shè)一個(gè)值位組合為:1000 0000,無(wú)符號(hào)字節(jié)就表示的128,有符號(hào)字節(jié)表示-128。

要得到一個(gè)二進(jìn)制補(bǔ)碼的數(shù)的相反數(shù),最簡(jiǎn)單的方法是反轉(zhuǎn)每一位,然后加1。
1是0000 0001,-1就是 1111 1110 + 1,或 1111 1111。

二進(jìn)制浮點(diǎn)數(shù)介紹

一個(gè)普通的十進(jìn)制浮點(diǎn)數(shù)可以這樣表示

0.234 = 2 /10 + 3 / 100 + 4 / 1000

從左往右各分母都是10的遞增次冪。

那么在二進(jìn)制浮點(diǎn)數(shù)中,使用2的冪作為分母,比如

.1011 = 1 / 2 + 0 / 4 + 1 / 8 + 1 / 16

八進(jìn)制和十六進(jìn)制

八進(jìn)制以8為基底,用0~7表示數(shù)字。十六進(jìn)制以16作為基底,用0 ~15表示數(shù)字。但沒(méi)有單獨(dú)的數(shù)表示10 ~ 15,所以用字母 A ~F表示。

在這里插入圖片描述

3位二進(jìn)制對(duì)應(yīng)一位八進(jìn)制

4位二進(jìn)制對(duì)應(yīng)一位十六進(jìn)制

C按位運(yùn)算符

C提供了按位邏輯運(yùn)算符和移位運(yùn)算符。

按位邏輯運(yùn)算符

4個(gè)按位邏輯運(yùn)算符都用于整形數(shù)據(jù),包括char。

二進(jìn)制反碼或按位取反:~

一元運(yùn)算符把1變?yōu)?,把0變?yōu)?。示例:

~(0001 1100)	//表達(dá)式
 (1110 0011)	// 結(jié)果值

需要注意的是該運(yùn)算符不會(huì)改變之前變量的值,但確實(shí)創(chuàng)建了一個(gè)可以使用或賦值的新值。

按位與:&

二元運(yùn)算符通過(guò)逐位比較兩個(gè)運(yùn)算對(duì)象生成一個(gè)新值。
對(duì)于每一個(gè)位,兩個(gè)運(yùn)算對(duì)象中相應(yīng)的位都為1時(shí),結(jié)果為1。示例:

(1001 1001) & (0011 1100)
//結(jié)果為
(0001 1000)

C有按位與和賦值結(jié)合的運(yùn)算符:&=

val &= 0247
等價(jià)于
val = val & 0247

按位或:|

二元運(yùn)算符|,對(duì)于每個(gè)位,如果兩個(gè)運(yùn)算對(duì)象中相應(yīng)的位是1,結(jié)果為1。
示例:

(1001 1001) | (0111 0010)
結(jié)果為
(1111 1011)

同時(shí)C也有這樣的運(yùn)算符:|=

按位異或:^

二元運(yùn)算符 ^,對(duì)于每一位,如果兩個(gè)運(yùn)算對(duì)象中相應(yīng)的位一個(gè)為1,但不是兩個(gè)為1,結(jié)果為1。
示例:

(1100 0001) ^ (0101 1011)
結(jié)果為
(1001 1010)

同時(shí)C也有這樣的運(yùn)算符: ^=

用法:掩碼

所謂掩碼指的是一些設(shè)置為開(kāi)(1)或關(guān)(0)的位組合。
假設(shè)定義符號(hào)常量MASK為2,即(0000 0010),那么語(yǔ)句

val &= MASK

就是把val中除了1號(hào)位以外的所有位都設(shè)置為01號(hào)位的值不變。這個(gè)過(guò)程叫做使用掩碼,掩碼中的0隱藏了val中的其他位。
圖解:

在這里插入圖片描述

用法:打開(kāi)位(設(shè)置位)

有時(shí)需要打開(kāi)一個(gè)值中的特定位,而其他位保持不變。

val |= MASK;

把val的1號(hào)位設(shè)置為1,其他位不變。

因?yàn)閨運(yùn)算符,任何位與0組合結(jié)果為本身,任何位與1組合,結(jié)果都為1。

用法:關(guān)閉位(清空位)

和打開(kāi)類似,有時(shí)需要再不影響其他位的情況下關(guān)閉指定的位。
假設(shè)要關(guān)閉變量val中的1號(hào)位,MASK只有1號(hào)位為1。即:

val = val & ~MASK;

由于MASK除1號(hào)位以外全為0,那~MASK除1號(hào)位以外全為1。再使用&,任何位與1組合都為本身,所以這條語(yǔ)句保持除1號(hào)位以外其他各位不變。
示例:

val ^= MASK;
(0000 1111) ^ (1011 0110)
結(jié)果為
(10111001)

用法:切換位

是指打開(kāi)已關(guān)閉的位,或關(guān)閉已打開(kāi)的位??梢允褂冒次划惢蜻\(yùn)算符(^)切換位。

if ((val & MASK) == MASK)
	printf("...");

val中與MASK為1的位相對(duì)應(yīng)的位都被切換了,MASK為0的位相對(duì)應(yīng)的位不變。

用法:檢查位的值

若檢查val的某一位是否為1,可設(shè)置一個(gè)掩碼剛好這個(gè)位為1.

若檢查第二位,即:

MASK為(0000 0010)

程序可以這樣寫(xiě):

if ((val & MASK) == MASK)
	printf("...");

為了避免信息漏過(guò)邊界,掩碼至少要與其覆蓋的值寬度相同。

移位運(yùn)算符

左移:<<

左移運(yùn)算符將其左側(cè)運(yùn)算對(duì)象每一位的值向左移動(dòng)其右側(cè)運(yùn)算對(duì)象指定的位數(shù)。左側(cè)運(yùn)算對(duì)象移出左末端位的值丟失,用0填充空出的位置。
示例:

(1000 0110) << 2
結(jié)果為
(0001 1000)

可以使用左移賦值運(yùn)算符(<<=)來(lái)更改變量的值。

int val = 1;	//0000 0001
val <<= 2;
結(jié)果為
0000 0100

右移:>>

右移運(yùn)算符將其左側(cè)運(yùn)算對(duì)象每一位的值向右移動(dòng)其右側(cè)運(yùn)算對(duì)象指定的位數(shù)。

對(duì)于無(wú)符號(hào)類型,用0填充空出的位置,對(duì)于有符號(hào)類型,結(jié)果取決于機(jī)器。

示例:>>=

int val = 16;	//0001 0000
val >>= 3;
結(jié)果為:
0000 0010

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++11 并發(fā)指南之std::thread 詳解

    C++11 并發(fā)指南之std::thread 詳解

    這篇文章主要介紹了C++11 并發(fā)指南之std::thread 詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語(yǔ)言修煉之路初識(shí)分支句?循環(huán)助本心上篇

    C語(yǔ)言修煉之路初識(shí)分支句?循環(huán)助本心上篇

    現(xiàn)實(shí)生活中我們經(jīng)常需要根據(jù)不同的條件做出不同的選擇。程序設(shè)計(jì)中也需要根據(jù)條件來(lái)選擇不同的程序進(jìn)行處理,這稱之為分支結(jié)構(gòu),當(dāng)條件表達(dá)式不存在時(shí),它被假設(shè)為真。您也可以設(shè)置一個(gè)初始值和增量表達(dá)式,一般情況下,C?程序員偏向于使用?for(;;)?結(jié)構(gòu)來(lái)表示一個(gè)無(wú)限循環(huán)
    2022-03-03
  • C語(yǔ)言鏈表實(shí)現(xiàn)貪吃蛇游戲

    C語(yǔ)言鏈表實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表實(shí)現(xiàn)貪吃蛇游戲源碼,適合C語(yǔ)言入門(mén)者學(xué)習(xí)閱讀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 帶頭結(jié)點(diǎn)的鏈表的基本操作(超詳細(xì))

    帶頭結(jié)點(diǎn)的鏈表的基本操作(超詳細(xì))

    鏈表是一種動(dòng)態(tài)分配空間的存儲(chǔ)結(jié)構(gòu),能更有效地利用存儲(chǔ)空間,通過(guò)對(duì)單鏈表基本操作的代碼實(shí)現(xiàn),我深刻領(lǐng)悟到以“指針”指示元素的后繼,在插入或刪除元素時(shí)不需要移動(dòng)元素
    2023-07-07
  • C語(yǔ)言實(shí)現(xiàn)井字棋詳解

    C語(yǔ)言實(shí)現(xiàn)井字棋詳解

    這篇文章主要為大家介紹了C語(yǔ)言如何實(shí)現(xiàn)井字棋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池

    C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池

    這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 最新評(píng)論