将 unsigned char 转换为 char 会导致不同的二进制表示形式?

casting unsigned char to char would result in different binary representations?

我认为标题很容易解释,但基本上我的意思是,如果我有以下说明:

a = (char) b;

知道 a 的类型是 charb 的类型是 unsigned char,该指令是否可以使 ab 有不同的二进制表示?

类型 char 可以是有符号的或无符号的。 Char 类型没有填充,因此所有位都是值位。

  • 如果char是无符号的,那么a的值位将与b的值位相同。

  • 如果char被签名,那么...

    • 如果b的值可以用char表示,ab的公共值位将相同。
    • 否则,从无法表示的 unsigned char 值到 char 的转换会导致 implementation-defined 结果。

总的来说,答案是否定的,没有区别。这里你可以自己测试一下。只需提供 'a' 和 'b'

的相应值
#include <stdio.h>
#include <string.h>

const char *byte_to_binary(int x)
{
    static char b[9];
    b[0] = '[=10=]';

    int z;
    for (z = 128; z > 0; z >>= 1)
        strcat(b, ((x & z) == z) ? "1" : "0");
    }

    return b;
}


int main(void) {
    unsigned char b = -7; 
    char a = -7; 
    printf("1. %s\n", byte_to_binary(a));
    a = (char) b;
    printf("2. %s\n", byte_to_binary(a));
    return 0;
}