【问题标题】:Why does the bitwise complement operator '~' behave differently in c# and java? [duplicate]为什么按位补码运算符 '~' 在 c# 和 java 中的行为不同? [复制]
【发布时间】:2015-01-11 14:48:01
【问题描述】:

当我在 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

【问题讨论】:

标签: java c# operators byte


【解决方案1】:

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

试试

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我还要强调,~ 运算符在 Java 和 C# 中的工作方式相同,唯一的区别在于 byte 在 Java 和 C# 中如何转换为字符串。
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2011-04-19
    • 1970-01-01
    • 2010-12-29
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多