我认为标题是非常自我解释的,但基本上我所说的是,如果我有以下指示:
a = (char) b;
知道a
的类型为char
且b
' s为unsigned char
,该指令是否会导致a
}和b
有不同的二进制表示?
答案 0 :(得分:4)
char
类型可以是有符号也可以是无符号。字符类型没有填充,因此所有位都是值位。
如果char
无符号,则a
的值位将与b
的值位相同。
如果签署了char
,那么......
b
的值可由char
表示,则a
和b
的公共值位将相同。unsigned char
值转换为char
会导致实现定义的结果。答案 1 :(得分:1)
#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;
}