(24)位運算子 sizeof運算子

2021-07-24 11:56:31 字數 1516 閱讀 8326

位運算子作用於整數型別,並把運算物件看成是二進位制的集合。位運算子提供檢查和設定二進位制位的功能,滿足左結合律。

但是位運算關於符號位如何處理沒有明確的規定,改變符號位的值是一種未定義的行為,所以建議僅將位運算子作用於無符號 型。

左移運算子(<

右移運算子(>>)的行為則依賴於其左側運算物件物件的型別:如果該運算物件是無符號型別,在左側插入值為0的二進位制位,如果

該運算物件是帶符號型別,在左側插入符號位的副本或值為0的二進位制位,如何選擇要視具體環境而定。

int b,a = 2;

b = a;

a =a << 3;

b = b >> 2;

cout << a << endl; //輸出16

cout << b << endl; //輸出0

位求反運算子(~)將運算物件逐位求反後生成乙個新值,將1置為0,、將0置為1:

unsigned int a = 4;

a = ~a;

cout << a << endl; //輸出4294967291

位與運算子(&):如果兩個運算物件的對應位置都是1則運算結果中該位為1,否則為0.

位或運算子(|):如果兩個運算物件的對應位置至少有乙個為1則運算結果中該位為1,否則為0.

位異或運算子(^):如果兩個運算物件的對應位置有且只有乙個1則運算結果中該位為1,否則為0.

sizeof運算子返回一條表示式或乙個型別名字所佔的位元組數。sizeof運算子滿足右結合律,其所得的結果是乙個size_t型別。

形式:

sizeof(type)

sizeof expr

第二種sizeof返回的是表示式結果型別的大小。

我們可以使用作用域運算子來獲取類成員的大小。通常情況下只有通過類的物件才能訪問到類的成員,但是sizeof運算子無須我們提

供乙個具體的物件,因為想知道類成員的大小無須真的獲取該成員。

sizeof運算子的結果部分的依賴於其作用的型別:

一.對char或者型別為char的表示式執行sizeof運算,結果得1

二.對引用型別執行sizeof運算得到被引用物件所佔空間的大小

三.對指標執行sizeof運算得到指標本身所佔空間的大小

四.對解引用指標執行sizeof運算得到指標指向的物件所佔空間的大小,指標不需有效。

五.對陣列執行sizeof運算得到整個陣列所佔空間的大小,等價於對陣列中所有的元素各執行一次sizeof運算並將所得結果求和。注

意,sizeof運算不會吧陣列轉換成指標來處理。

六.對string物件或vector物件執行sizeof運算只返回該型別固定部分的大小,不會計算物件中的元素所占用了多少空間。

位運算子,「,」逗號運算子,

位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...

運算子之位運算子

右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...

ECMAScript 運算子 位運算子

位運算子是在數字底層 即表示數字的 32 個數字 進行操作的 重溫整數 ecmascript 整數有兩種型別,即有符號整數 允許用正數和負數 和無符號整數 只允許用正數 在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?有符號整數使用 31 位表示整數的數值,用第 32...