为什么按位补码运算符'〜'在c#和java中表现不同?

时间:2014-11-14 08:52:12

标签: java c# operators byte

当我在c#和java中执行代码时,我会得到不同的输出。 在c#中,获得了输出254,但在java中得到了输出-2。为什么它在输出方面表现不同?但我想在java中输出相同的输出意味着我想要输出254

在c#代码中:

static void Main(string[] args)
{
     byte value = 1;
     System.Console.WriteLine("Value after conversion {0}", (byte)(~value));
}

输出:254

在Java代码中:

public static void main(String[] args) {
        byte value = 1;
        System.out.println((byte)(~value ));
}

输出:-2

2 个答案:

答案 0 :(得分:10)

在C#byte中表示无符号 8位整数值,即其范围为0-255。但是,在Java中,字节是带符号的 8位整数值,即其范围是-128-127。 -2(有符号)具有与254(无符号)相同的二进制表示。

答案 1 :(得分:0)

要在Java中获取无符号的8位值,您需要执行& 0xFF

尝试

System.out.println(~1 & 0xFF);

System.out.println((byte) ~1 & 0xFF);