相关疑难解决方法(0)

签署C中的无符号转换 - 它总是安全吗?

假设我有以下C代码.

unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)

什么隐式转换在这里怎么回事,这是代码为安全的所有值ui?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)

c type-conversion

127
推荐指数
3
解决办法
16万
查看次数

为什么unsigned int 0xFFFFFFFF等于int -1?

在C或C++中,可以说size_t(无符号整数数据类型)可以容纳的最大数量与向该数据类型强制转换-1相同.例如,请参阅size_t的无效值

为什么?

我的意思是,(谈论32位整数)AFAIK最重要的位保持有符号数据类型的符号(即,位0x80000000形成负数).那么,1是0x00000001 .. 0x7FFFFFFFF是int数据类型可以容纳的最大正数.

然后,AFAIK的-1 int的二进制表示应该是0x80000001(也许我错了).为什么/如何将这个二进制值转换为完全不同的任何东西(0xFFFFFFFF)时将int转换为unsigned?或..如何形成0xFFFFFFFF的二进制-1?

我毫不怀疑在C :((unsigned int)-1)== 0xFFFFFFFF或((int)0xFFFFFFFF)== -1同样真实而不是1 + 1 == 2,我只是想知道为什么.

c c++ binary casting

26
推荐指数
3
解决办法
7万
查看次数

C的比较是层次结构促销的错误

#include <stdio.h>

int main()
{
    unsigned int x=1;
    char y=-1;
    if (x>y)
    {
        printf("x>y");
    }
    else if(x==y)
        printf("x=y");
    else
        printf("x<y");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,它执行最后一个其他的printf,这实在令人尴尬,因为x是1而y是-1.

我认为有比较的东西,'x> y',有层次推广,因为当我将x的类型改为'int'而不是'unsigned int'时,它做得恰到好处.这个问题真的很有趣..欢迎任何答案/思考/建议.

c

1
推荐指数
1
解决办法
107
查看次数

标签 统计

c ×3

binary ×1

c++ ×1

casting ×1

type-conversion ×1