Jam*_*346 5 c# bit bitwise-operators
为什么C#的按位运算NOT符返回(the_number*-1)-1?
byte a = 1;
Console.WriteLine(~a); //equals -2
byte b = 9;
Console.WriteLine(~b); //equals -10
// Shouldn't a=0 and b=6?
Run Code Online (Sandbox Code Playgroud)
我怎么用C#做这个?
9 = 0b1001 -> NOT
= 0b0110 = 6
Run Code Online (Sandbox Code Playgroud)
kni*_*ttl 11
按位运算返回类型int(有符号)的值.有符号整数使用二进制补码来表示负数.从byte到int时使用符号扩展.
byte a = 1; // 0b00000001
int notA = ~a; // 0b11111110 = -128 + 64 + 32 + 16 + 8 + 4 + 2 = -2 (actually 0b11111111 11111111 11111111 11111110)
byte b = 9; // 0b00001001
int notB = ~9; // 0b11110110 = -128 + 64 + 32 + 16 + 4 + 2 = -10 (actually 0b11111111 11111111 11111111 11110110)
Run Code Online (Sandbox Code Playgroud)
强制转换为byte将为您提供"预期"结果 0b11110110
byte notB = unchecked((byte)(~b)); // 0b11110110 = 128 + 64 + 32 + 16 + 4 + 2
Console.WriteLine(notB); // 246
Run Code Online (Sandbox Code Playgroud)