关于AND或or操作的解释在我的C sharp代码

本文关键字:我的 sharp 代码 解释 AND or 操作 关于 | 更新日期: 2023-09-27 18:13:58

我正在尝试分析c#中的一些代码。我对转换数字有一些误解,可能是c#代码中的and操作。我有如下所示的代码。

        public void SerialNumber(UInt32 number)
    {
        _sensorNumber=0;
        if (number == 0)
            number = (UInt32)(USB.Id << 16) | (_sensorNumber << 10) | 1;
        SerialNumber = string.Format("{0}-{1}-{2}",
            (number & 0xFFFF0000) >> 16,
            (number & 0x0000FC00) >> 10,
            number & 0x000003FF);
    }

谁能给我解释清楚这段代码是做什么的?我需要在"SerialNumber"行中解释一下。当我试图调试这段代码时,我观察到两种不同的情况。

1),当我有数字= 65668097;然后我得到"SerialNumber = 1002-0-1

"

2)当我有number = 0;它正在获得USB。Id = 15152;在那之后,我不明白发生了什么操作,最后数字= 993001473然后我得到"SerialNumber = 15152-0-1"

谁能解释一下AND, OR操作会发生什么?

关于AND或or操作的解释在我的C sharp代码

&|分别为逻辑。这意味着如果你用两个数字来做,它们的位表示在逻辑上比较,你就得到了结果。例如:

101011和110010 = 100010

101011或110010 = 111011

>>是位移位运算符,后面的数字告诉您应该执行多少移位。你可以在这里阅读:http://www.blackwasp.co.uk/CSharpShiftOperators.aspx

我希望它能帮助你开始。

编辑:以防你不知道。0xFFFF0000是数字的十六进制表示形式。更多信息请访问:http://en.wikipedia.org/wiki/Hexadecimal

您可能希望看到十六进制格式的数字,以便更好地理解代码。

序列号(作为数字或字符串)是3个不同事物的组合(以单个整数编码):USB ID,传感器编号和…别的东西。USB Id占据前16位,传感器编号为下一个6位,最后一个部分为10位(16+10+6 = 32位= sizeof(UInt32)): 0xFFFF0000是前16位的掩码(0xFFFF = 2^16-1),接下来的6位为0xFC00,最后10位为0x3FF (0x3FF = 1023 = 2^10 -1, 0xFFFF = 0xFC00 + 0x3FF)。

简而言之,"按位与"(&)用于从完整整数中分离出三个部分,"按位或"(|)用于从其部分中组合回数字。