在C#中可以对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。
C# 中支持的位操作符号有:
|
运算符号
|
意义
|
运算对象类型
|
运算结果类型
|
对象数
|
实例
|
|
~
|
按位取反运算
|
整型,字符型
|
整型
|
1
|
~a
|
|
&
|
位逻辑与运算
|
2
|
a & b
| ||
|
|
|
位逻辑或运算
|
2
|
a | b
| ||
|
^
|
位逻辑异或运算
|
2
|
a ^ b
| ||
|
<<
|
位左移运算
|
2
|
a<<4
| ||
|
>>
|
位右移运算
|
2
|
a>>2
|
下面详细介绍每个位运算的操作。
1. 按位取反操作 ~
按位取反操作会将整个变量的所有位都进行取反,包括符号位。
class Program
{
static void Main(string[] args)
{
int number = 5;
number = ~number;
Console.WriteLine(number);
int k = -5;
number = ~k;
Console.WriteLine(number);
}
}
输出为:
-6
4
举例: 在C#中int 类型占4个字节, 5 的二进制码为:
0000 0000 0000 0000 0000 0000 0000 0101
按位取反后的二进制码为:
1111 1111 1111 1111 1111 1111 1111 1010
这个二进制码对应内存中存储的补码,让这个二进制码减去1,得到表示数字的反码:
1111 1111 1111 1111 1111 1111 1111 1001
由这个反码即可获得源码,请注意,最左边的为符号位,在活的原码的时候符号位不取反:
1000 0000 0000 0000 0000 0000 0000 0110
这个数在内存中即为 -6。
同样,-5在内存中的原码为:
1000 0000 0000 0000 0000 0000 0000 0101
获得反反码为:
1111 1111 1111 1111 1111 1111 1111 1010
补码为:
1111 1111 1111 1111 1111 1111 1111 1011
这个补码按位取反以后为:
0000 0000 0000 0000 0000 0000 0000 0100
在内存中即为 4.
2、位逻辑与运算 &
注意:符号位同样参加按位与操作。
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = 2;
int c = a & b;
Console.WriteLine(c);
}
}
a 为:
0000 0000 0000 0000 0000 0000 0000 0001
b 为:
0000 0000 0000 0000 0000 0000 0000 0010
按位与以后为:
0000 0000 0000 0000 0000 0000 0000 0000
下面举例当符号位参与操作的情况:
static void Main(string[] args)
{
int a = -2147483647;
int b = 1;
int c = a & b;
Console.WriteLine(c);
}
a:
1000 0000 0000 0000 0000 0000 0000 0001
a的原码为:
1111 1111 1111 1111 1111 1111 1111 1111
b的二进制:
0000 0000 0000 0000 0000 0000 0000 0001
按位与以后还是:
0000 0000 0000 0000 0000 0000 0000 0001
3、位逻辑或运算 |
同上,同样包含符号位操作。
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = 2;
int c = a | b;
Console.WriteLine(c);
}
}a 为:
0000 0000 0000 0000 0000 0000 0000 0001
b 为:
0000 0000 0000 0000 0000 0000 0000 0010
按位与以后为:
0000 0000 0000 0000 0000 0000 0000 0000
a 为:
0000 0000 0000 0000 0000 0000 0000 0001
b 为:
0000 0000 0000 0000 0000 0000 0000 0010
按位或以后为:
0000 0000 0000 0000 0000 0000 0000 0011
4、位逻辑异或运算 ^
同上,同样包含符号位操作。
5、位左移运算 <<
同上,同样包含符号位操作。
static void Main(string[] args)
{
int a = -2147483647;
a = a << 2;
Console.WriteLine(a);
}0000 0000 0000 0000 0000 0000 0000 0100
左移两位以后,符号位丢失:
0000 0000 0000 0000 0000 0000 0000 0100即为4.6、位右移运算 >>
同上,同样包含符号位操作。
本文详细介绍了C#中的位运算符及其使用方法,包括按位取反、位逻辑与、位逻辑或、位逻辑异或、位左移和位右移运算。通过具体的代码示例解释了这些运算符如何工作,并展示了它们在整型数值上的应用。
1053

被折叠的 条评论
为什么被折叠?



