与C++ "simple"符号和符号的计算混淆

Confused with C++ "simple" calculation with sign &

本文关键字:符号 计算 simple C++      更新时间:2023-10-16

我正在看一个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)

我在某个地方读到,如果相同"权重"的两个位都是1,则AND返回1如果我将ui AND 0xffffff转换成Binary:

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

做任何改变…

我完全走错路了吗?对不起,我的英语很差,我来自韩国。谢谢你的帮助{^^;

For AND its

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

所以如果你用0xffffff和一个数字,你基本上只是保持数字在这些位置。你用0来填补缺失的部分

在你的例子中:

0x0F007057B9 0000111100000000011100000101011110111001
0xffffff     0000000000000000111111111111111111111111
-------------------------------------------------------
             0000000000000000011100000101011110111001

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