gpt4 book ai didi

c++ - 双与位运算的算术

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:37 24 4
gpt4 key购买 nike

有些明显的东西我觉得我应该在这里理解,但我不:t:

void main()
{
long first = 0xffffffc1;
long second = 0x92009019;

//correct
__int64 correct = (((__int64)first << 32) | 0x00000000ffffffff) & (0xffffffff00000000 | second); //output is 0xffffffc192009019;

//incorrect
__int64 wrong = (double)(((__int64)first << 32) + second); //output is 0xffffffc092009019;
}

为什么加操作会影响高 4 字节,如何影响?

(编译器是VC++ 2003)

最佳答案

可能是因为second是有符号的,也就是说0x92009019是负数。

编辑:问题实际上包含两个问题。

1) 如何将两个 32 位数字连接到一个 64 位值?

回答:

(((uint64_t)first) << 32) | (uint32_t)second

2) 使用浮点类型 double 进行位运算是否明智?

回答:不,不是。请使用正确的工具来完成这项工作。如果要进行位运算,请使用整数。如果您想要(几乎)连续的值,请使用浮点值。

关于c++ - 双与位运算的算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703812/

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