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

发布时间:2022-10-21 09:35:10 作者:iii
来源:亿速云 阅读:115

本文小编为大家详细介绍“C#位运算符的基本使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#位运算符的基本使用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等。本篇体验位运算符在C#中的应用。

进制转换

因为位运算是在二进制基础上进行的,所以进制转换是位运算的前提。

十进制转换成二进制

比如,把10进制的数783转换成二进制,经过下面10个步骤。

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

把余数从下到上拼接起来,就是783的二进制,即1100001111。

在C#中,如果是Int16类型,意味着有16位整型数。对于783来说,如果表示成Int16类型,不足16位的话,要在前面补0,即要在1100001111补6个0,完整的表示是:0000001100001111。同样的道理,如果是Int32类型,意味着有32位整型数。

如何把-783转换成Int16类型的二进制呢?

&rarr;我们知道正数783表示成Int16类型的二进制是:0000001100001111
&rarr;在每个位置上倒转,即如果是1就变成0,反之亦然,倒转后变成:1111110011110000
&rarr;再加上1,变成:1111110011110001

二进制转换成十进制

比如,把Int16类型的二进制数0000000100010110转换成十进制,经过下面的16个步骤。

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

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

把所有的结果加起来:
0 + 2 + 4 + 0 + 16 + 0 + 0 + 0 + 256 + 0 = 2 + 4 + 16 + 256 = 278
所以,0000000100010110的十进制数是278。

如何把一个Int16类型的负二进制数转换成十进制呢?

比如有这样的一个二进制数:1111111111010011(Int16类型,第一位是数字1表示负数,第一位是数字0表示正数)
&rarr;每个位置上反转变成:0000000000101100
&rarr;进过计算,得到的十进制数是:44
&rarr;再加1,得到:45
&rarr;再变成负数,得到:-45

| 按位或操作符

假设,十进制数38和53进行按位或计算。
&rarr;经过计算,十进制数38的二进制表达是00100110,十进制数538的二进制表达是00110101。
&rarr;对| 按位或操作符来说,只要对应的二个二进位有一个为1时,结果就为1。

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

&rarr;把得到的00110111转换成十进制就是:55

如果用C#表示就是:

byte result = 38 | 53;

& 按位与操作符

假设,十进制数76和231进行按位与计算。
&rarr;经过计算,十进制数76的二进制表达是01001100,十进制数231的二进制表达是11100111。
&rarr;对& 按位与操作符来说,只要对应的二个二进位有一个为0时,结果就为0。

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

&rarr;把得到的 01000100转换成十进制就是:68

如果用C#表示就是:

byte result = 76 & 231;

^ 按位异或操作符

假设,十进制数138和43进行按位与计算。
&rarr;经过计算,十进制数138的二进制表达是10001010,十进制数43的二进制表达是00101011。
&rarr;对^ 按位异或操作符来说,当两对应的二进位相异时,结果为1。

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

&rarr;把得到的10100001转换成十进制就是:161

如果用C#表示就是:

byte result = 138 ^ 43 ;

例子1:使用^ 按位异或交换2个数

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

以上过程是这样的:

(1)x ^= y,相当于x = x ^ y

x的二进制是:00100
y的二进制是:00110
x和y进行异或,结果是:00010
x转换成十进制后,x为:2

(2)y ^= x,相当于y = y ^ x

y的二进制是:00110
x的二进制是:00010
y和x进行异或,结果是:00100
y转换成十进制后,y为:4

(3)x ^= y,相当于x = x ^ y

x的二进制是:00010
y的二进制是:00100
x和y进行异或,结果是:00110
x转换成十进制后,x为:6

例子2:使用^按位异或进行加密运算

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());

~ 取反操作符

假设,十进制数52进行取反计算。
&rarr;经过计算,十进制数52的二进制表达是00110100
&rarr;对~ 取反操作符来说,对应的二进位数按位求反,0变成1,1变成0

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

&rarr;把得到的11001011转换成十进制就是:203

如果用C#表示就是:

byte result = ~52;

x << n 左移运算符

每位向左移动n位,右边空缺的位置补0。
假设,十进制数154进行左移。

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

如果用C#表示就是:

byte b1 = 154;
byte b2 = (byte)b1 << 1;
Console.Writeline(b2);//结果是52,二进制是00110100

x >> n 右移运算符

每位向右移动n位,左边空缺的位置补0。
假设,十进制数155进行右移。

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

如果用C#表示就是:

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

总结:
| 按位或操作符来说,只要对应的二个二进位有一个为1时,结果就为1
& 按位与操作符来说,只要对应的二个二进位有一个为0时,结果就为0
^ 按位异或操作符来说,当两对应的二进位相异时,结果为1
~ 取反操作符来说,对应的二进位数按位求反,0变成1,1变成0
x << n 左移运算符,每位向左移动n位,右边空缺的位置补0
x >> n 右移运算符,每位向右移动n位,左边空缺的位置补0

读到这里,这篇“C#位运算符的基本使用方法有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. Java中7种位运算符的使用方法
  2. Python中的有哪些位运算符

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:怎么用C#把对象序列化和反序列化

下一篇:C#的const、readonly和static关键字如何使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》