C++中有符号和无符号之间的转换

ims*_*rch 5 c++ casting

考虑以下C++代码:

#include <cstdio>

using namespace std;

int main()
{
    int ia = -5;
    unsigned int uia = ia;
    char ca = -5;
    unsigned char uca = ca;

    printf("%d\n", (ia == uia));
    printf("%d\n", (ca == uca));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

1
0
Run Code Online (Sandbox Code Playgroud)

我不明白有什么之间的区别int,并char同时从铸造signedunsigned

你能开导我吗?

Mar*_*k B 7

从signed转换为unsigned时,它们的行为都相同.不同的是==比较.它的行为符合int/unsigned的预期,但是当你比较两个较小的类型时,它们都会被提升为int第一个.所以会发生的是-5和-5的无符号8位表示都被提升到int然后进行比较.这些明显不同,无法进行比较.