困惑于C ++"简单"用符号计算&

时间:2016-10-11 01:23:11

标签: c++

我正在查看一个C ++源代码,其中有一个看似简单的计算。然而,由于没有C ++知识,我无法理解它是如何计算的(我的目标是在Excel下进行相同的计算)。

uint64_t fpo = (((ui>>32) << 24) | (ui & 0xffffff)) + 0x123e00;
PrintAndLog("ui result : %lld [0x%llX]", ui, ui);

就我而言,ui是0x0F007057B9 结果是0xF8295B9

如果我使用Windows计算器,我会(在十六进制模式下)

(0x0F007057B9 AND 0xffffff) + 0x123e00

我得到相同的结果(期望第一个0xF)

我已经读过某个地方,如果两个相同的比特都是AND,那么AND将返回1#34;是1 所以,如果我把ui和0xffffff转换为Binary:

0x0F007057B9 0000111100000000011100000101011110111001
0xffffff                     111111111111111111111111
-------------------------------------------------------
             0000111100000000011100000101011110111001

哪个会做出任何改变......

我完全走错路吗?抱歉我的英语不好,我来自韩国。 谢谢你帮助我{^^;

1 个答案:

答案 0 :(得分:1)

对于AND

NSDateComponents

因此,如果你和一个带有0xffffff的数字,你基本上只是将数字保留在那些位置。你用0补充缺少的那些。

在你的情况下:

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1

我不确定,如果那是你的问题:)