运算符
- 除法 `/`
- `异或 ^ ` 和 `位异或 ^ `
- 位或 `|`
- 位与 `&`
- 位反 `~`
- `位左移 << ` 和 `位右移 >> `
除法 /
- 整型之间的除法结果为商数
Console.WriteLine(10 / 3); // 3
- 含有浮点数参与的除法结果为浮点数
Console.WriteLine(10 / 3f); // 3.333333
Console.WriteLine(10.00 / 3); // 3.33333333333333
Console.WriteLine(10.5 / 3); // 3.5
异或 ^
和 位异或 ^
-
true
和false
参与判断时
- 如果两个结果相同,返回值为
false
Console.WriteLine(true ^ true); // False
Console.WriteLine(false ^ false); // False
- 如果两个结果不同,返回值为
true
Console.WriteLine(false ^ true); // True
Console.WriteLine(true ^ false); // True
-
表达式
数字
参与判断
Console.WriteLine(-10 ^ 10); // -4
// 1000 1010 原 -10
// 1111 0101 反 -10
// 1111 0110 补 -10
// 0000 1010 补 +10
// ------------------
// 1111 1100 补 计算结果 => 按位异或 1^0 1^0 1^0 1^0 0^1 1^0 1^1 0^0
// 1000 0011 反 求反
// 1000 0100 原 求原
// -(2^2) = -4
Console.WriteLine(10 ^ 10); // 0
// 0000 1010 原反补 +10
// 0000 1010 原反补 +10
// --------------------
// 0000 0000 原反补 计算结果 0
Console.WriteLine(6 ^ 10); // 12
// 0000 0110 原反补 +6
// 0000 1010 原反补 +10
// --------------------
// 0000 1100 原反补 计算结果 8 + 4 = 12
位或 |
Console.WriteLine(-10 | 10); // -2
// 1000 1010 原 -10
// 1111 0101 反 -10
// 1111 0110 补 -10
// 0000 1010 原反补 +10
// 1111 1110 补 计算结果
// 1000 0001 反 求反
// 1000 0010 原 求原 -2
Console.WriteLine(10 | 2); // 10
// 0000 1010 原反补
// 0000 0010 原反补
// 0000 1010 原反补 10
Console.WriteLine(10 | 12); // 14
// 0000 1010 原反补
// 0000 1100 原反补
// 0000 1110 原反补 14
位与 &
Console.WriteLine(-10 & 10); // 2
// 1000 1010 原
// 1111 0101 反
// 1111 0110 补
// 0000 1010 原反补
// 0000 0010 原反补 2
Console.WriteLine(10 & 2); // 2
// 0000 1010 原反补
// 0000 0010 原反补
// 0000 0010 原反补 2
Console.WriteLine(10 & 12); // 8
// 0000 1010 原反补
// 0000 1100 原反补
// 0000 1000 原反补 8
位反 ~
Console.WriteLine(~10);
// 0000 1010 原反补 +10
// 1111 0101 补 ~10
// 1000 1010 反
// 1000 1011 原
// -11
Console.WriteLine(~-10);
// 1000 1010 原 -10
// 1111 0101 反 -10
// 1111 0110 补 -10
// 0000 1001 原反补 ~-10
// 9
Console.WriteLine(~-8);
// 1000 1000 原 -8
// 1111 0111 反 -8
// 1111 1000 补 -8
// 0000 0111 原反补 ~-8
// 8
位左移 <<
和 位右移 >>
Console.WriteLine(10 << 2); // 40 => 10 * 2^2 = 40
// ---- 0000 1010 ----
// ---- 0000 1010 00--
// ---- --00 1010 00--
// 0010 1000
// 2^5 + 2^3 = 40
Console.WriteLine(10 >> 2); // 2 => 10 / 2^2 = 2
// ---- 0000 1010 ----
// --00 0000 1010 ----
// --00 0000 10-- ----
// 0000 0010
// 2^1 = 2
Console.WriteLine(-8 << 2); // -32 => -(8 * 2^2) = -32
// => -(8 << 2)
// ---- 0000 1000 ----
// ---- 0000 1000 00--
// ---- --00 1000 00--
// 0010 0000
// 32
Console.WriteLine(-8 >> 2); // -2 => -(8 / 2^2) = -2
// => -(8 >> 2)
// ---- 0000 1000 ----
// --00 0000 1000 ----
// --00 0000 10-- ----
// 0000 0010
// 2