1 位操作符

2021-09-27 04:30:30 字數 939 閱讀 7451

本文用來記錄學習筆記

位與:&  用來給某一位進行寫0操作(與1位與無變化,與0位與變成0) ,特定位清零 。例:0xaa&0xf0 = 0xa0

位或:|   用來給某一位進行寫1操作(與0或與無變化,與1位或變成1) ,特定位置1。例:0xaa|0xf0 = 0xfa

位異或:^  用來給某一位進行取反操作(與0位異或無變化,與1位異或變取反),特定位取反 。例:0xaa^0xf0=0x5a

對暫存器進行操作修改某一位時,應先讀取暫存器的值給某一變數。對這一變數進行位操作,然後再將這一變數賦予暫存器。簡而言之:讀、改、寫。這樣做的目的是在不改變其它位的值的情況下,只對特定位進行修改。

位取反:~ 有符號數和無符號數有區別

對於無符號數:直接按位取反即可

對於有符號數,按位取反、減1取反(反碼轉換為原碼)

例:   

int a = 45;

unsigned int c = 45;

int b,d;

b = ~a;

d = ~c;

printf("bx=%x.\n",b);

printf("b=%d.\n",b);

printf("dx=%x.\n", d);

printf("d=%u.\n", d);

結果:bx=ffffffd2.

b=-46.

dx=ffffffd2.

d=4294967250.

對於無符號數按位取反比較簡單,在這裡不進行詳細闡述

對於有符號數,以十進位制數45為例進行闡述,本系統中int是4位元組,即32位:

十進位制數45轉換為十六進製制數為0x0000002d;

按位取反為0xffffff2d(有符號數在計算機中以補碼形式儲存,故此處為所求結果的補碼形式)

將補碼形式轉換為原碼為減1取反為0x8000002e,最後將結果轉換為十進位制為-46       

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

位運算操作符

與運算,二元操作符,對兩個操作員的每個二進位制位進行與運算,運算規則為 1 1 1 1 0 0 0 1 0 0 0 0 異或運算,二元操作符,對兩個操作員的每個二進位制位進行異或運算,運算規則為 1 1 0 1 0 1 0 1 1 0 0 0 或運算,二元操作符,對兩個操作員的每個二進位制位或運算,...

c 位操作符

我們知道,任何資訊在計算機中都是以二進位制的形式儲存的。位操作符就是對資料按二進位制進行運算的操作符。c 語言中的位操作符有 與 或 異或 取補 左移 右移 其中,取補只有乙個運算元,而其它的位操作符都有兩個運算元。這些運算都不會產生溢位。位操作符的運算元為整型或者是可以轉換為整型的任何其它型別。與...