今天小编给大家分享一下C#位运算符怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等。
因为位运算是在二进制基础上进行的,所以进制转换是位运算的前提。
比如,把10进制的数783转换成二进制,经过下面10个步骤。
把余数从下到上拼接起来,就是783的二进制,即1100001111。
在C#中,如果是Int16类型,意味着有16位整型数。对于783来说,如果表示成Int16类型,不足16位的话,要在前面补0,即要在1100001111补6个0,完整的表示是:0000001100001111。同样的道理,如果是Int32类型,意味着有32位整型数。
→我们知道正数783表示成Int16类型的二进制是:0000001100001111
→在每个位置上倒转,即如果是1就变成0,反之亦然,倒转后变成:1111110011110000
→再加上1,变成:1111110011110001
比如,把Int16类型的二进制数0000000100010110转换成十进制,经过下面的16个步骤。
从右向左,依次乘以2的n次方。
把所有的结果加起来:
0 + 2 + 4 + 0 + 16 + 0 + 0 + 0 + 256 + 0 = 2 + 4 + 16 + 256 = 278
所以,0000000100010110的十进制数是278。
比如有这样的一个二进制数:1111111111010011(Int16类型,第一位是数字1表示负数,第一位是数字0表示正数)
→每个位置上反转变成:0000000000101100
→进过计算,得到的十进制数是:44
→再加1,得到:45
→再变成负数,得到:-45
假设,十进制数38和53进行按位或计算。
→经过计算,十进制数38的二进制表达是00100110,十进制数538的二进制表达是00110101。
→对| 按位或操作符来说,只要对应的二个二进位有一个为1时,结果就为1。
→把得到的00110111转换成十进制就是:55
如果用C#表示就是:
byte result = 38 | 53;
假设,十进制数76和231进行按位与计算。
→经过计算,十进制数76的二进制表达是01001100,十进制数231的二进制表达是11100111。
→对& 按位与操作符来说,只要对应的二个二进位有一个为0时,结果就为0。
→把得到的 01000100转换成十进制就是:68
如果用C#表示就是:
byte result = 76 & 231;
假设,十进制数138和43进行按位与计算。
→经过计算,十进制数138的二进制表达是10001010,十进制数43的二进制表达是00101011。
→对^ 按位异或操作符来说,当两对应的二进位相异时,结果为1。
→把得到的10100001转换成十进制就是:161
如果用C#表示就是:
byte result = 138 ^ 43 ;
int x = 4; int y = 6; x ^= y; y ^= x; x ^= y; Console.WriteLine(x); //6 Console.WriteLine(y); //4
以上过程是这样的:
x的二进制是:00100
y的二进制是:00110
x和y进行异或,结果是:00010
x转换成十进制后,x为:2
y的二进制是:00110
x的二进制是:00010
y和x进行异或,结果是:00100
y转换成十进制后,y为:4
x的二进制是:00010
y的二进制是:00100
x和y进行异或,结果是:00110
x转换成十进制后,x为:6
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进行取反计算。
→经过计算,十进制数52的二进制表达是00110100
→对~ 取反操作符来说,对应的二进位数按位求反,0变成1,1变成0
→把得到的11001011转换成十进制就是:203
如果用C#表示就是:
byte result = ~52;
每位向左移动n位,右边空缺的位置补0。
假设,十进制数154进行左移。
如果用C#表示就是:
byte b1 = 154; byte b2 = (byte)b1 << 1; Console.Writeline(b2);//结果是52,二进制是00110100
每位向右移动n位,左边空缺的位置补0。
假设,十进制数155进行右移。
如果用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#位运算符怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。