32 位的有符號整數 如何在C和C 中操作位

2021-10-13 19:30:06 字數 1738 閱讀 3613

計算機中的所有資料均以二進位制表示,即0或1。計算機不理解我們的語言,它們理解位。通常,程式設計師並不關心位級別的操作。但是有時程式設計師必須更深入地研究並研究位元。

位表示

在程式設計中,將n位整數儲存

為由n位組成的二進位制數。因此,乙個32位整數由32位組成,而64位

整數由64位組成。在c ++程式語言中,int資料型別

為16位,32位和64位型別。

這是32位整數數字10的位表示形式:

在c ++中,

int是帶符號的或無符號的,因此位表示形式是帶符號的或無符號的。

在帶符號的表示中,第一位表示數字的符號(0

表示正,1表示負),其餘n-1位包含數字的

大小。有符號和無符號表示之間存在聯絡。簽名號碼

-x等於乙個無符號數

2^n – x

-x (signed) = 2^n - x (unsigned)

inta =-10;unsignedintb = a;std::cout<< a <

在簽名表示中,下乙個數字

2^(n – 1) – 1

是 -2^n – 1

,並且以無符號表示形式,是下乙個數字

是 位操作

我們可以使用&運算子檢查數字是偶數還是奇數。

unsigned int的二進位制表示形式:

void binary(unsignedintnum)

獲取位的位置

boolget_bit(intnum,intposition)

在清零位置

int clear_bit(intnum,intposition)

代表集

整數的位表示為0索引,並且索引從右側(即最低有效位)開始。這樣我們就可以代表集合的每個子集

作為n位整數,其位指示哪個元素屬於該子集。如果在數字的二進位制表示中索引3的位為1,索引4的位為0,則3屬於該子集,而4不屬於該子集。

對於32位整數,集合為,子集為。該集合的二進位制表示形式是:

,十進位制表示形式是2 ^ 8 + 2 ^ 4 + 2 ^ 3 + 2 ^ 1 = 282。

**形成子集並向其中新增元素:

int add_elements_to_subset()

列印子集元素的**:

void printing_subset(intsubset){for(inti =0; i <32; i++){if(subset & (1<< i))std::cout<< i <

C語言位操作 判斷整數的符號

關於衡量計算操作的方法 當為演算法統計操作的數量的時候,所有的c運算子被認為是一樣的操作。中間過程不被寫入隨機儲存器 ram 而不被計算,當然,這種運算元的計算方法,只是作為那些接近機器指令和cpu執行時間的服務。所有的操作被假設成花相同的執行時間,事實上是不正確的。有很多不同的因素決定乙個系統能多...

C語言有符號整數隱式轉換無符號整數出現的陷阱

include include int main 該程式意思是比較字串陣列s和字串陣列t的長度大小。按我們的理解,在第7行應該返回false,即輸出0。c語言執行運算時,如果它的乙個運算數是無符號的,而另乙個是有符號的,那麼c語言會隱式的將有符號引數強制型別轉換為無符號數,並假設這兩個數都是非負的,...

C語言的位域和符號位擴充套件

最近面試易路聯動的時候考了位域方面的只是,結果全做錯了,回來想了會也沒弄明白,後來上網查了下原來是英特爾的面試題 如下 答案為 1,0,1,4 t.b 1很好理解,t.a和t.c等於 1就不大好理解了,這個就關係到資料型別與資料在計算機中的表示了,因為顯示的時候指定的是 d型別的,那麼說明將引數當成...