C primer學習筆記 4 8位運算子

2021-07-31 04:00:42 字數 1219 閱讀 2376

【位運算子(優先順序由上到下遞減)(左結合律):

~expr // 位求反

expr1 << expr2 // 左移,返回左側值的二進位制形式左移右側個位的拷貝(右移同理)

expr1 & expr2 // 位與,對應位依次進行相與運算,並返回運算結果。與(&&)注意區分

expr1 ^ expr2 // 位異或,對應位依次進行異或運算(異1同0),並返回運算結果

expr1 | expr2 // 位或,對應位依次進行或運算,並返回運算結果,與(||)注意區分

對於左移和右移運算子,右側的運算物件一定不能為負,而且值必須嚴格小於結果的位數。】

【位運算子作用於整數型別的運算物件,並把運算物件看成是二進位制位的集合。

17.2節將要介紹,一種名為bitset 的標準庫型別也可以表示任意大小的二進位制位集合,所以位運算子同樣能用於bitset 型別。】

位運算子不改變處理物件,只是將處理物件處理後的拷貝作為返回值,類似之前的toupper() 函式。

一般來說,如果運算物件是「小整形」,則它的值會被自動提公升成較大的整數型別

如果運算物件是帶符號的且值為負,則位運算子對其的處理依賴與機器(編碼方式),所以一般位運算子通常只用於處理無符號型別。】

【當希望使用資料表示物件的兩種不同狀態時,使用位及位運算子可以有效地節省空間(時間能節省麼?)

unsigned long w = 0; // int 只能確保佔16位(機器不同),long可確保至少佔32位

w |= 1ul << 27; // 將w 的第28 位置1,其他位不變

w &= ~(1ul << 27); // 將w 的第28位置0,其他位不變

bool status = w & (1ul << 27); // 使用status 拷貝w 的第28位的狀態

以上的例子說明了如何運用位或和位與,來實現控制某些無關位狀態不變,將相關位置為所需數值的方法。】

【io 操作中使用的實際上是左移和右移的過載版本,由此我們可得知移位運算子滿足左結合律

移位運算子的優先順序不高不低:比算數運算子的優先順序低(輸出算術式時不需另加括號,十分方便);但比關係運算子、賦值運算子和條件運算子的優先順序高。】

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...

《C Primer》學習筆記

2008年7月18日 颱風海鷗登陸 1 宣告與定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。變數的宣告用於向程式表明變數的型別和名字。變數的宣告包括物件名 物件型別和物件型別前的關鍵字extern 當設計標頭檔案時,記住定義和宣告的區別是很重要的...

c primer學習筆記

3.2 標準庫型別string 1.注意在使用empty size 和is x 這種函式時請注意其使用的方法,例如 string s hello world if s.empty empty 和size 更像是一種屬性 if is x s 0 is 這種函式更像是一種函式,而且是針對的單個字元 2....