gpt4 book ai didi

c - 整数提升和无符号解释

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:10 25 4
gpt4 key购买 nike

int_8 int8     = ~0;
uint_16 uInt16 = (uint_16) int8;

关于上面的类型转换;在 C 标准中,我可以在哪里找到对以下行为的指示的引用?- 在无符号解释 (uInt16=0xFFFF) 之前对较大类型进行符号扩展,而不是在对较大类型 (uInt16=0xFF) 进行 0 扩展后进行无符号解释。

来自 C99 6.3.1.8

否则,如果无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩,则带符号整数类型的操作数转换为无符号整数操作数的类型类型。

上面的陈述很清楚需要转换哪个变量,但是对于实际应该如何执行对话并不是很清楚,因此我的问题要求从标准中获得引用。谢谢

最佳答案

根据 standard :

6.3.1.3 Signed and unsigned integers

......
2. Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.

以及在解释上述内容时避免混淆的脚注:

The rules describe arithmetic on the mathematical value, not the value of a given type of expression.

即如果您的 int8 的值为 -1(假设负数表示是 2 的补码,在您的示例中就是这样),当转换为 uint16_t ,值 (0xFFFF + 1) 将被添加到它(比 uint16_t 可以表示的最大值多一个),产生 0xFFFF + 1 - 1 = 0xFFFF

关于c - 整数提升和无符号解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38660199/

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