gpt4 book ai didi

c++ - 如何根据其位将有符号整数值转换为无符号整数?

转载 作者:行者123 更新时间:2023-11-30 03:45:52 29 4
gpt4 key购买 nike

我想将有符号值转换为无符号值(例如,int8_tuint8_t),但它也必须保留其位。

我该怎么做?

最佳答案

在实践中:您可以简单地将带符号的值分配给 uint8_t

u = i;

或者你可以用带符号的值初始化它,

uint8_t u = i;

这假定了一个二进制补码 有符号整数表示,这是当今普遍使用的。使用该表示,这些位将被准确保留。 “在实践中”的资格是指该假设。


例如,在现代机器上,例如的 8 位带符号表示−42,是位模式数 −42 + 256,即(位模式数)214。标准保证将其转换为无符号数以产生相同的值模 256。因此它是相同的位模式,即位模式 214。


从有符号到无符号由标准明确定义,尽管保留位模式(1)通常只是一种实际效果(所有现代计算机都是这样设计的)。但是,如果无法表示无符号值,则朝相反的方向会遇到特定于编译器的影响。这种转换需要更加小心,因为这是编译器的判断问题,而不是硬件级别的实际保证。


<支持>(1) 作为 M.M.在 his answer 中解释您的示例中的特定签名类型 int8_t 是一种自从 C11 在 C 中保证二进制补码的类型。我在 C99 标准的最终草案中没有看到这种语言,所以大概不是在 C99 中,因此不在基于 C99 的 C++11 或 C++14 中,但在我认为基于 C11 的 C++17 中可能存在。

关于c++ - 如何根据其位将有符号整数值转换为无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34468090/

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