gpt4 book ai didi

c++ - 将有符号整数位复制到无符号整数的有效方法

转载 作者:IT老高 更新时间:2023-10-28 12:57:05 27 4
gpt4 key购买 nike

/* [1] */
int i = -1;
unsigned u = (unsigned)i;

/* [2] */
int i = -1;
unsigned u;
memcpy(&u, &i, sizeof i);

/* [3] */
int i = -1;
unsigned u = *(unsigned *)&i;

为了将有符号整数位复制到其无符号伙伴,[1] 应该可以在大多数机器上工作,但据我所知,这并不能保证行为。

[2] 应该完全符合我的要求,但我想避免调用库函数的开销。

那么[3]呢?它是否有效地实现了我的意图?

最佳答案

/* [4] */
union unsigned_integer
{
int i;
unsigned u;
};

unsigned_integer ui;
ui.i = -1;
// You now have access to ui.u

警告: 正如评论中所讨论的,这在 CC++ 中的未定义行为似乎没问题,因为您的问题同时具有标签 我会把它留在这里。有关更多信息,请查看此 SO 问题:

Accessing inactive union member and undefined behavior?

我会建议 C++ 中的 reinterpret_cast:

/* [5] */
int i = -1;
unsigned u = reinterpret_cast<unsigned&>(i);

关于c++ - 将有符号整数位复制到无符号整数的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048135/

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