我刚开始在C#上挣扎,我有一个问题.
在以下代码中:
byte var = 0;
Console.WriteLine("{0}", ~var);
Run Code Online (Sandbox Code Playgroud)
为什么打印-1?来自http://www.csharp-station.com/Tutorial/CSharp/Lesson02我读过字节范围从0到255而〜(00000000)_2给出(11111111)_2等于(255)_10 .
您要打印的值不是类型byte.它是类型int.
将~(按位NOT)运算符无定义byte,但它是int.您的代码隐式扩展转换为int.您的代码大致相当于使用显式强制转换的此版本:
int temp = ~((int)var);
Console.WriteLine("{0}", temp);
Run Code Online (Sandbox Code Playgroud)
按位非运算符将位反转以给出结果111....111(基数2).它在二进制补码表示中的值为-1 .
如果您希望结果是值为255的字节,则必须添加显式强制转换:
byte x = 0;
byte result = (byte)~x;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |