gpt4 book ai didi

c# - C# 中的按位 "~"运算符

转载 作者:可可西里 更新时间:2023-11-01 08:07:10 27 4
gpt4 key购买 nike

考虑这个单元测试代码:

    [TestMethod]
public void RunNotTest()
{

// 10101100 = 128 + 32 + 8 + 4 = 172
byte b = 172;

// 01010011 = 64 + 16 + 2 + 1 = 83
Assert.AreEqual(83, (byte)~b);
}

这个测试通过了。但是,如果没有字节转换,它就会失败,因为“~”运算符返回 -173 的值。这是为什么?

最佳答案

int 的提升发生在 byte 上,因为没有为它们定义二进制补码。

参见 Unary numeric promotionsBitwise complement operator .

本质上,当您在无符号 8 位值 10101100 上调用 ~ 时,它会被提升为 32 位有符号值 0...010101100。它的补码是 32 位值 1...101010011,对于 int 来说等于 -173。将此结果转换为 byte 是降级为无符号 8 位值 01010011,丢失最重要的 24 位。最终结果被解释为无符号表示形式的 83

关于c# - C# 中的按位 "~"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com