gpt4 book ai didi

c - c中如何存储有符号和无符号整数?

转载 作者:太空狗 更新时间:2023-10-29 17:22:21 25 4
gpt4 key购买 nike

我正在尝试运行以下代码,但对这里发生的事情感到困惑:

int main()
{
/*
a = -1;
b = 0xffffffff;
*/
if(-1 == 0xffffffff )
printf("-1 is equal to maximum\n");
else
printf(" -1 is not equal to maximum\n");

if(0xff < -1)
printf(" Less than -1 \n");
if(0xff < 0xffffffff)
printf(" Less than maximum\n");

我也尝试使用注释部分并将 -1 替换为“a”并将 0xffffffff 替换为“b”,但结果相同。

它是 32 位系统,所以我采用了 4 字节的整数大小。

我的输出是:

-1 is equal to maximum
Less than maximum

如果 -1 等于最大值,那么它应该执行最后两个 if 语句。但它没有发生。为什么?

最佳答案

我将从 C++ 中引用它;我认为 C 也一样:

文字 -1 始终是 signed int

0xff 是一个signed int,但是0xffffffff 是一个unsigned int

在比较混合符号时,两个操作数都转换为无符号,解释所有结果。

这是关于 C++11 表 6 中裸整数文字(即没有类型后缀)类型的规则:

  • 十进制字面量是 intlong intlong long int 中最小的类型,以适合者为准。

  • 十六进制字面量是intunsigned intlong intunsigned long int<中最小的类型long long intunsigned long long int,以适合者为准。

再说一遍:

  • 在您的第一次比较中,双方都转换为 unsigned int,给出值 0xFFFFFFFF

  • 第二次比较,两项都是有符号整数,左边是255,右边是-1

  • 在第三次比较中,两项都转换为unsigned int


观察到我们从来不需要担心这个问题的签名的硬件实现。唯一相关的平台相关值是 int 的大小,我们在断言 0xffffffff 不适合 int 但 < em>确实适合 unsigned int

关于c - c中如何存储有符号和无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12351233/

25 4 0
文章推荐: c - 结构数组 - 删除/添加元素和打印
文章推荐: angular -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com