首页 > 学院 > 开发设计 > 正文

C#位运算符的基本用法

2019-11-17 02:57:57
字体:
来源:转载
供稿:网友

C#位运算符的基本用法

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

○ 进制转换 ※ 十进制转换成二进制 ※ 二进制转换成十进制○ | 按位或操作符○ & 按位与操作符○ ^ 按位异或操作符 ※ 使用^按位异或交换2个数 ※ 使用^按位异或进行加密运算○ ~ 取反操作符○ x << n 左移运算符○ x >> n 右移运算符

进制转换

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

□ 十进制转换成二进制

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

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

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

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

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

□二进制转换成十进制

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

从右向左,依次乘以2的n次方。2把所有的结果加起来:0 + 2 + 4 + 0 + 16 + 0 + 0 + 0 + 256 + 0 = 2 + 4 + 16 + 256 = 278所以,0000000100010110的十进制数是278。

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

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

| 按位或操作符

假设,十进制数38和53进行按位或计算。→经过计算,十进制数38的二进制表达是00100110,十进制数538的二进制表达是00110101。→对| 按位或操作符来说,只要对应的二个二进位有一个为1时,结果就为1。3→把得到的00110111转换成十进制就是:55

如果用C#表示就是:

byte result = 38 | 53;

& 按位与操作符

假设,十进制数76和231进行按位与计算。→经过计算,十进制数76的二进制表达是01001100,十进制数231的二进制表达是11100111。→对& 按位与操作符来说,只要对应的二个二进位有一个为0时,结果就为0。4→把得到的 01000100转换成十进制就是:68

如果用C#表示就是:

byte result = 76 & 231;

^ 按位异或操作符

假设,十进制数138和43进行按位与计算。→经过计算,十进制数138的二进制表达是10001010,十进制数43的二进制表达是00101011。→对^ 按位异或操作符来说,当两对应的二进位相异时,结果为1。5→把得到的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 ^ yx的二进制是:00100y的二进制是:00110x和y进行异或,结果是:00010x转换成十进制后,x为:2

(2)y ^= x,相当于y = y ^ xy的二进制是:00110x的二进制是:000

上一篇:C#string详解

下一篇:Unity3d网格合并

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表