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

时间:2016-01-13 23:33:08

标签: c casting char unsigned signed

我认为标题是非常自我解释的,但基本上我所说的是,如果我有以下指示:

a = (char) b;

知道a的类型为charb' s为unsigned char,该指令是否会导致a }和b有不同的二进制表示?

2 个答案:

答案 0 :(得分:4)

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

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

  • 如果签署了char,那么......

    • 如果b的值可由char表示,则ab的公共值位将相同。
    • 否则,从无法代表的unsigned char值转换为char会导致实现定义的结果。

答案 1 :(得分:1)

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

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

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

    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;
}