国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

C語(yǔ)言之位操作的示例分析

發(fā)布時(shí)間:2021-09-04 11:55 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù)

小編給大家分享一下C語(yǔ)言之位操作的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

    二進(jìn)制數、位和字節

    在我們日常生活中通常使用的十進(jìn)制。

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

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

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

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

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

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

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

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

    二進(jìn)制整數

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

    可以從左往右給這8位分別編號 7~0。在一字節中,編號是7的位被稱(chēng)為高階位,編號為0的被稱(chēng)為低階位,每一位的編號對應2的相應指數。

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

    所以1字節可以存儲0~255范圍內的數字總共256個(gè)值,在A(yíng)SCII碼中對應了256個(gè)狀態(tài)。

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

    有符號整數

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

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

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

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

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

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

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

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

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

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

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

    3位二進(jìn)制對應一位八進(jìn)制

    4位二進(jìn)制對應一位十六進(jìn)制

    C按位運算符

    C提供了按位邏輯運算符和移位運算符。

    按位邏輯運算符

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

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

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

    ~(0001 1100)	//表達式
     (1110 0011)	// 結果值

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

    按位與:&

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

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

    C有按位與和賦值結合的運算符:&=

    val &= 0247
    等價(jià)于
    val = val & 0247
    按位或:|

    二元運算符|,對于每個(gè)位,如果兩個(gè)運算對象中相應的位是1,結果為1。
    示例:

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

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

    按位異或:^

    二元運算符 ^,對于每一位,如果兩個(gè)運算對象中相應的位一個(gè)為1,但不是兩個(gè)為1,結果為1。
    示例:

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

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

    用法:掩碼

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

    val &= MASK

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

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

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

    val |= MASK;

    把val的1號位設置為1,其他位不變。

    因為|運算符,任何位與0組合結果為本身,任何位與1組合,結果都為1。

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

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

    val = val & ~MASK;

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

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

    用法:切換位

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

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

    val中與MASK為1的位相對應的位都被切換了,MASK為0的位相對應的位不變。

    用法:檢查位的值

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

    若檢查第二位,即:

    MASK為(0000 0010)

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

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

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

    移位運算符

    左移:<<

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

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

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

    int val = 1;	//0000 0001
    val <<= 2;
    結果為
    0000 0100

    右移:>>

    右移運算符將其左側運算對象每一位的值向右移動(dòng)其右側運算對象指定的位數。

    對于無(wú)符號類(lèi)型,用0填充空出的位置,對于有符號類(lèi)型,結果取決于機器。

    示例:>>=

    int val = 16;	//0001 0000
    val >>= 3;
    結果為:
    0000 0010

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

    国产精品亚洲а∨天堂2021| 国产人成无码视频在线| 狠狠躁天天躁中文字幕| 国产小呦泬泬99精品| 女人被男人桶爽视频网站| 真人做人60分钟啪啪免费看|