溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#位運算符的基本使用方法有哪些

發(fā)布時間:2022-10-21 09:35:10 來源:億速云 閱讀:115 作者:iii 欄目:編程語言

本文小編為大家詳細(xì)介紹“C#位運算符的基本使用方法有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C#位運算符的基本使用方法有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

位運算符包括:| 按位或 OR,& 按位與 AND,^ 按位異或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等。本篇體驗位運算符在C#中的應(yīng)用。

進(jìn)制轉(zhuǎn)換

因為位運算是在二進(jìn)制基礎(chǔ)上進(jìn)行的,所以進(jìn)制轉(zhuǎn)換是位運算的前提。

十進(jìn)制轉(zhuǎn)換成二進(jìn)制

比如,把10進(jìn)制的數(shù)783轉(zhuǎn)換成二進(jìn)制,經(jīng)過下面10個步驟。

C#位運算符的基本使用方法有哪些

把余數(shù)從下到上拼接起來,就是783的二進(jìn)制,即1100001111。

在C#中,如果是Int16類型,意味著有16位整型數(shù)。對于783來說,如果表示成Int16類型,不足16位的話,要在前面補0,即要在1100001111補6個0,完整的表示是:0000001100001111。同樣的道理,如果是Int32類型,意味著有32位整型數(shù)。

如何把-783轉(zhuǎn)換成Int16類型的二進(jìn)制呢?

&rarr;我們知道正數(shù)783表示成Int16類型的二進(jìn)制是:0000001100001111
&rarr;在每個位置上倒轉(zhuǎn),即如果是1就變成0,反之亦然,倒轉(zhuǎn)后變成:1111110011110000
&rarr;再加上1,變成:1111110011110001

二進(jìn)制轉(zhuǎn)換成十進(jìn)制

比如,把Int16類型的二進(jìn)制數(shù)0000000100010110轉(zhuǎn)換成十進(jìn)制,經(jīng)過下面的16個步驟。

從右向左,依次乘以2的n次方。

C#位運算符的基本使用方法有哪些

把所有的結(jié)果加起來:
0 + 2 + 4 + 0 + 16 + 0 + 0 + 0 + 256 + 0 = 2 + 4 + 16 + 256 = 278
所以,0000000100010110的十進(jìn)制數(shù)是278。

如何把一個Int16類型的負(fù)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制呢?

比如有這樣的一個二進(jìn)制數(shù):1111111111010011(Int16類型,第一位是數(shù)字1表示負(fù)數(shù),第一位是數(shù)字0表示正數(shù))
&rarr;每個位置上反轉(zhuǎn)變成:0000000000101100
&rarr;進(jìn)過計算,得到的十進(jìn)制數(shù)是:44
&rarr;再加1,得到:45
&rarr;再變成負(fù)數(shù),得到:-45

| 按位或操作符

假設(shè),十進(jìn)制數(shù)38和53進(jìn)行按位或計算。
&rarr;經(jīng)過計算,十進(jìn)制數(shù)38的二進(jìn)制表達(dá)是00100110,十進(jìn)制數(shù)538的二進(jìn)制表達(dá)是00110101。
&rarr;對| 按位或操作符來說,只要對應(yīng)的二個二進(jìn)位有一個為1時,結(jié)果就為1。

C#位運算符的基本使用方法有哪些

&rarr;把得到的00110111轉(zhuǎn)換成十進(jìn)制就是:55

如果用C#表示就是:

byte result = 38 | 53;

& 按位與操作符

假設(shè),十進(jìn)制數(shù)76和231進(jìn)行按位與計算。
&rarr;經(jīng)過計算,十進(jìn)制數(shù)76的二進(jìn)制表達(dá)是01001100,十進(jìn)制數(shù)231的二進(jìn)制表達(dá)是11100111。
&rarr;對& 按位與操作符來說,只要對應(yīng)的二個二進(jìn)位有一個為0時,結(jié)果就為0。

C#位運算符的基本使用方法有哪些

&rarr;把得到的 01000100轉(zhuǎn)換成十進(jìn)制就是:68

如果用C#表示就是:

byte result = 76 & 231;

^ 按位異或操作符

假設(shè),十進(jìn)制數(shù)138和43進(jìn)行按位與計算。
&rarr;經(jīng)過計算,十進(jìn)制數(shù)138的二進(jìn)制表達(dá)是10001010,十進(jìn)制數(shù)43的二進(jìn)制表達(dá)是00101011。
&rarr;對^ 按位異或操作符來說,當(dāng)兩對應(yīng)的二進(jìn)位相異時,結(jié)果為1。

C#位運算符的基本使用方法有哪些

&rarr;把得到的10100001轉(zhuǎn)換成十進(jìn)制就是:161

如果用C#表示就是:

byte result = 138 ^ 43 ;

例子1:使用^ 按位異或交換2個數(shù)

int x = 4; 
int y = 6;
x ^= y;
y ^= x;
x ^= y;
Console.WriteLine(x); //6
Console.WriteLine(y); //4

以上過程是這樣的:

(1)x ^= y,相當(dāng)于x = x ^ y

x的二進(jìn)制是:00100
y的二進(jìn)制是:00110
x和y進(jìn)行異或,結(jié)果是:00010
x轉(zhuǎn)換成十進(jìn)制后,x為:2

(2)y ^= x,相當(dāng)于y = y ^ x

y的二進(jìn)制是:00110
x的二進(jìn)制是:00010
y和x進(jìn)行異或,結(jié)果是:00100
y轉(zhuǎn)換成十進(jìn)制后,y為:4

(3)x ^= y,相當(dāng)于x = x ^ y

x的二進(jìn)制是:00010
y的二進(jìn)制是:00100
x和y進(jìn)行異或,結(jié)果是:00110
x轉(zhuǎn)換成十進(jìn)制后,x為:6

例子2:使用^按位異或進(jìn)行加密運算

string msg = "這是我要加密的string字符串";
string k = "mypassword";
for(int i = 0; i < msg.Length; i++)
{
    sb.Append((char)(msg[i] ^ k[i % k.Length]));
}
Console.WriteLine(sb.ToString());

~ 取反操作符

假設(shè),十進(jìn)制數(shù)52進(jìn)行取反計算。
&rarr;經(jīng)過計算,十進(jìn)制數(shù)52的二進(jìn)制表達(dá)是00110100
&rarr;對~ 取反操作符來說,對應(yīng)的二進(jìn)位數(shù)按位求反,0變成1,1變成0

C#位運算符的基本使用方法有哪些

&rarr;把得到的11001011轉(zhuǎn)換成十進(jìn)制就是:203

如果用C#表示就是:

byte result = ~52;

x << n 左移運算符

每位向左移動n位,右邊空缺的位置補0。
假設(shè),十進(jìn)制數(shù)154進(jìn)行左移。

C#位運算符的基本使用方法有哪些

如果用C#表示就是:

byte b1 = 154;
byte b2 = (byte)b1 << 1;
Console.Writeline(b2);//結(jié)果是52,二進(jìn)制是00110100

x >> n 右移運算符

每位向右移動n位,左邊空缺的位置補0。
假設(shè),十進(jìn)制數(shù)155進(jìn)行右移。

C#位運算符的基本使用方法有哪些

如果用C#表示就是:

byte b1 = 155;
byte b2 = (byte)(b1 >> 1);
Console.WriteLine(b2); // 結(jié)果: 77

總結(jié):
| 按位或操作符來說,只要對應(yīng)的二個二進(jìn)位有一個為1時,結(jié)果就為1
& 按位與操作符來說,只要對應(yīng)的二個二進(jìn)位有一個為0時,結(jié)果就為0
^ 按位異或操作符來說,當(dāng)兩對應(yīng)的二進(jìn)位相異時,結(jié)果為1
~ 取反操作符來說,對應(yīng)的二進(jìn)位數(shù)按位求反,0變成1,1變成0
x << n 左移運算符,每位向左移動n位,右邊空缺的位置補0
x >> n 右移運算符,每位向右移動n位,左邊空缺的位置補0

讀到這里,這篇“C#位運算符的基本使用方法有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI