gpt4 book ai didi

c - 为什么 0x1 被解释为小于 0xC0000000?

转载 作者:行者123 更新时间:2023-12-01 13:59:21 25 4
gpt4 key购买 nike

我正在学习整数的二进制表示,并尝试编写一个返回 int 使用饱和度乘以 2 的函数。思考过程是如果值正向溢出函数返回INT_MAX,反之如果它负向溢出则返回INT_MIN。在所有其他情况下,二进制值左移 1。

我想知道的是为什么我必须将值 0xC0000000 转换为 int 以便在我传递参数 时让我的函数正常工作>x = 1

这是我的功能:

int timestwo (int x){
if(x >= 0x40000000) // INT_MAX/2 + 1
return 0x7fffffff; // INT_MAX
else if(x < (int) 0xC0000000) // INT_MIN/2
return 0x80000000; // INT_MIN
else
return x << 1;
return 0;
}

最佳答案

C 中的十六进制(和八进制)文字使用最小的提升类型(= int 或更高级别的类型)类型,有符号或无符号,可以容纳该值。这不同于十进制文字,如果它们没有 u,则保留在有符号类型中。/U后缀,或在无符号类型中(6.4.4.1p5):

integer-literal types

这使得 0xC0000000在具有 32 位无符号整数和比较(或通过运算符配对)的系统上,无符号与相同等级的有符号强制有符号变为无符号( ​​6.3.1.8 ),因此没有 (int) Actor 你得到一个隐含的(unsigned int)x < (unsigned int) 0xC0000000 .

关于c - 为什么 0x1 被解释为小于 0xC0000000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60177989/

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