久久午夜无码,国产中文资源,Chinese熟女熟妇2乱2,高清五码d一区

左移運(yùn)算符優(yōu)先級(jí)(C語(yǔ)言學(xué)習(xí)筆記10按位運(yùn)算和移位運(yùn)算)

左移運(yùn)算符優(yōu)先級(jí)(C語(yǔ)言學(xué)習(xí)筆記10按位運(yùn)算和移位運(yùn)算)

寸婭芳 2025-04-17 科技 59 次瀏覽 0個(gè)評(píng)論
按位運(yùn)算和移位運(yùn)算

按位運(yùn)算(Bitwise),包括與(&)、或(|)、非(~)、異或(^)共4種運(yùn)算。 移位(shift)運(yùn)算,包括左移(<<)、右移(>>)、無(wú)符號(hào)右移(>>>)共3種。

整數(shù)的位運(yùn)算操作簡(jiǎn)單,但細(xì)節(jié)不少,使用時(shí)需要留心檢查,以便確認(rèn)結(jié)果是否正確。

細(xì)節(jié)1:位運(yùn)算適用于整數(shù)類(lèi)類(lèi)型和字符類(lèi)型

包括 sbyte(System.SByte)、byte(System.Byte)、short(System.Int16)、ushort(System.UInt16)、 int(System.Int32)、 uint(System.UInt32)、 long(System.Int64)、 ulong(System.UInt64)、 nint(System.IntPtr)、 nuint(System.UIntPtr)、 char(System.Char)。

細(xì)節(jié)2: 這些操作針對(duì) int、 uint、 long、 ulong 類(lèi)型定義

也就是說(shuō),這些操作本質(zhì)上是在32位或64位整數(shù)上進(jìn)行的,其結(jié)果也是這些類(lèi)型。 (包括nint和nuint,nint和nuint由平臺(tái)定義,要么是32位,要么是64位的整數(shù))。 如果兩個(gè)操作數(shù)都是其他整數(shù)類(lèi)型(sbyte、byte、short、ushort 或 char), 它們的值將轉(zhuǎn)換為 int 類(lèi)型,結(jié)果類(lèi)型也是 int 類(lèi)型。 如果操作數(shù)是不同的整數(shù)類(lèi)型,它們的值將轉(zhuǎn)換為最接近的包含整數(shù)類(lèi)型。

示例代碼說(shuō)明

為了方便展示,下面代碼引入了一個(gè)自定義方法 string BitStr(整數(shù)類(lèi)類(lèi)型),用來(lái)顯示整數(shù)的二進(jìn)制形式,例如:

BitStr((byte)2) 返回 "0b_0000_0010"

BitStr(16) 返回 "0b_0000_0000_0000_0000_0000_0000_0001_0000"

BitStr(-1) 返回 "0b_1111_1111_1111_1111_1111_1111_1111_1111"

當(dāng)然,也可以直接使用 Convert.ToString(value, 2) 來(lái)得到二進(jìn)制字符串,只是格式略有不同。

在C# 交互窗口(C# Interactive) 環(huán)境中,很容易輸入和運(yùn)行一些代碼片段,用來(lái)進(jìn)行一些功能驗(yàn)證。 具體操作方式是,在vs2022中,選擇菜單: 視圖(View)--- 其它窗口(Other Windows)--- C# 交互窗口(C# Interactive)。

~ 邏輯非(NOT)運(yùn)算,一元操作,只有一個(gè)運(yùn)算數(shù)

按位非(求反)運(yùn)算,在每一位上,1變?yōu)?,0變?yōu)?。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

& 邏輯與(AND)運(yùn)算

按位與運(yùn)算,在兩個(gè)操作數(shù)每一對(duì)應(yīng)位上,都是1才為1,否則為0。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

| 邏輯或(OR)運(yùn)算

按位與運(yùn)算,在兩個(gè)操作數(shù)每一對(duì)應(yīng)位上,只要有1則為1,全部0才為0。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

^ 邏輯異或(XOR)運(yùn)算

按位與運(yùn)算,在兩個(gè)操作數(shù)每一對(duì)應(yīng)位上,相同則為0,不同則為1。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

左移位運(yùn)算符 <<

所有數(shù)位向左移動(dòng),高位丟棄,低位補(bǔ)0。

移位運(yùn)算符的移位計(jì)數(shù)說(shuō)明:因?yàn)榘次贿\(yùn)算的操作是針對(duì)32位或64位整數(shù)定義的,所以能夠移動(dòng)的位數(shù)是有范圍的, 對(duì)于 x << count 來(lái)說(shuō),

如果 x 的類(lèi)型為 int 或 uint,則移位計(jì)數(shù)由右側(cè)操作數(shù)的低階五位定義。 即 count = count & 0b_1_1111,也等于 count = count % 32, 實(shí)際移動(dòng)位數(shù)在0和31之間。

如果 x 的類(lèi)型為 long 或 ulong,則移位計(jì)數(shù)由右側(cè)操作數(shù)的低階六位定義。 即 count = count & 0b_11_1111,也等于 count = count % 64, 實(shí)際移動(dòng)位數(shù)在0和63之間。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

右移位運(yùn)算符 >>

右移位運(yùn)算和左移位運(yùn)算一樣,移位計(jì)數(shù)有相同的限制。

右移位運(yùn)算分為兩種,一種是算術(shù)右移位運(yùn)算,一種是邏輯右移位運(yùn)算, 它們的區(qū)別在于移位的是有符號(hào)數(shù)類(lèi)型,還是無(wú)符號(hào)數(shù)類(lèi)型,它們最高位的處理不一樣。

算術(shù)右移位運(yùn)算

對(duì)于有符號(hào)數(shù)類(lèi)型,執(zhí)行算術(shù)右移位。 移位時(shí),最低位舍棄,最高位補(bǔ)符號(hào)位。 也就是說(shuō),原來(lái)最高位是0的,右移時(shí)繼續(xù)補(bǔ)0。 原來(lái)最高位是1的,右移時(shí)繼續(xù)補(bǔ)1。

最高位為0時(shí)是正數(shù),最高位為1時(shí)是負(fù)數(shù)。 所以在右移位過(guò)程中,符號(hào)保持不變。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

邏輯右移位運(yùn)算

對(duì)于無(wú)符號(hào)數(shù)類(lèi)型,進(jìn)行邏輯右移位。 移位時(shí),最低位舍棄,最高位補(bǔ)0。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

無(wú)符號(hào)右移運(yùn)算符 >>>

為了方便,C# 11 開(kāi)始引入無(wú)符號(hào)右移,不區(qū)分有符號(hào)數(shù)和無(wú)符號(hào)數(shù), 移位時(shí),最低位舍棄,最高位補(bǔ)0。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

細(xì)節(jié)3:復(fù)合運(yùn)算(比如 >>= )操作數(shù)的類(lèi)型保持不變

例如,對(duì)于 a >>= 3,a 的類(lèi)型保持不變。顯然,這是必須的。覺(jué)得可以這樣理解, 在運(yùn)算過(guò)程中,遵循的規(guī)則和上面所說(shuō)的一樣,但系統(tǒng)根據(jù)需要,對(duì)結(jié)果進(jìn)行處理, 把結(jié)果轉(zhuǎn)化為a的類(lèi)型(比如舍棄了不需要的高位字節(jié))。

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

細(xì)節(jié)4:按位運(yùn)算和一些其它類(lèi)似操作的區(qū)別

第一,&(邏輯 AND)、|(邏輯 OR)和 ^(邏輯異或)同樣用于bool類(lèi)型,它們有類(lèi)似的邏輯,但是細(xì)節(jié)上有很多不同,應(yīng)視為不同的類(lèi)別。

bool 類(lèi)型的邏輯運(yùn)算,操作數(shù)包括 true、false、null 這3個(gè)不同的值,運(yùn)算結(jié)果也是 true、false、null 這3個(gè)值之一。

第二,條件邏輯運(yùn)算符,&&(條件邏輯與)和 ||(條件邏輯或)在執(zhí)行過(guò)程中,有值得注意的地方。

條件邏輯運(yùn)算有短路特性,當(dāng)參與運(yùn)算的表達(dá)式有多個(gè)時(shí),如果根據(jù)計(jì)算順序能提前知道結(jié)果,則后面的表達(dá)式將被忽略,它們不會(huì)被計(jì)算。

例如語(yǔ)句 if(f1(a, b) || f2(a, b, c)) { // 代碼...},如果 f1(a, b) == true,顯然 if 的條件肯定是成立的,此時(shí) f2(a, b, c) 是不會(huì)被執(zhí)行的。

需要非常清楚這一點(diǎn),因?yàn)?f2 的執(zhí)行與否,根據(jù)實(shí)際具體代碼的不同,可能會(huì)產(chǎn)生不同的影響。

移位運(yùn)算的一個(gè)實(shí)際應(yīng)用例子

本文示例里面用到的 BitStr 方法,就是通過(guò)移位來(lái)實(shí)現(xiàn)把整數(shù)變?yōu)槎M(jìn)制字符串的功能。下面是其中的一個(gè)主要函數(shù):

C#語(yǔ)言學(xué)習(xí)筆記10 —— 按位運(yùn)算和移位運(yùn)算

此外,和位運(yùn)算相關(guān)的,還有一些重要的內(nèi)容,如:

(1)運(yùn)算符優(yōu)先級(jí)。

(2)所有枚舉類(lèi)型支持 ~、&、| 和 ^ 運(yùn)算符。

(3)用戶(hù)定義的類(lèi)型可以重載~、<<、>>、>>>、&、| 和 ^ 運(yùn)算符。

(4)其它內(nèi)容。

限于篇幅,這里省略,請(qǐng)查看相關(guān)文檔。

轉(zhuǎn)載請(qǐng)注明來(lái)自夕逆IT,本文標(biāo)題:《左移運(yùn)算符優(yōu)先級(jí)(C語(yǔ)言學(xué)習(xí)筆記10按位運(yùn)算和移位運(yùn)算)》

每一天,每一秒,你所做的決定都會(huì)改變你的人生!

發(fā)表評(píng)論

快捷回復(fù):

評(píng)論列表 (暫無(wú)評(píng)論,59人圍觀)參與討論

還沒(méi)有評(píng)論,來(lái)說(shuō)兩句吧...

国产超碰 在线| 91精品婷婷国产综合久久圖片影視| 欧美国产性爱网址| aⅤ免费影院免费看| 国产又粗又爽的视频| 国产成人永久免费公开视频| 一区二区日韩蜜乳牛牛| 亚洲欧美中文日韩在线V日本| 色咪咪五月婷婷综合| 综合五月六月婷| 日韩无码免费大全| 精品无码久久久久久国产麻豆| 亚洲最新无码中文字幕久久| 无码A∨人妻精品| 国产老熟女子人伦视频| 国产亚洲另类无码专区| 日韩欧美一卡2卡3卡4卡新区在线| 强上美女同事国产av| 国产老妇在线| 成人一区二区三区国产| 欧美大片久久久久免费一级黄片| 另类在线调教| 无码中文字幕在线视频| 色婷婷开心伊人六月| 免费欧美亚洲三级片中文字幕 | 久久久久国产精品三级网| 熟妇人妻外国电影| 丁香五月欧美乱伦| 麻豆久久五月国产综合| 中文字幕人妻一级全黄| 丝袜熟女一区| 国产精品一二三| 爽爽精品DVD蜜桃成熟时电影院| 四虎永久看片在线| 欧美激情小说视频| 四虎影视影院789| 国产精品久久久影院| 国产精品视频专区| 91日韩在线观看视频| 久久久久久久久国产二区| 国产AⅤ激情无码久久久无码|