繁体   English   中英

C#中按位“〜”运算符

[英]Bitwise “~” Operator in C#

考虑以下单元测试代码:

    [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。 为什么是这样?

由于未为二进制补码定义byte因此会在byte上提升为int

请参见一元数值提升按位补数运算符

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

因为~返回一个int。 请参见〜运算符(C#参考) (MSDN)

它仅针对int, uint, long, and ulong预定义-因此在byte上使用它时存在隐式byte

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM