将 unsigned char 转换为 char 会导致不同的二进制表示形式?
casting unsigned char to char would result in different binary representations?
我认为标题很容易解释,但基本上我的意思是,如果我有以下说明:
a = (char) b;
知道 a
的类型是 char
而 b
的类型是 unsigned char
,该指令是否可以使 a
和 b
有不同的二进制表示?
类型 char
可以是有符号的或无符号的。 Char 类型没有填充,因此所有位都是值位。
如果char
是无符号的,那么a
的值位将与b
的值位相同。
如果char
被签名,那么...
- 如果
b
的值可以用char
表示,a
和b
的公共值位将相同。
- 否则,从无法表示的
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;
}
我认为标题很容易解释,但基本上我的意思是,如果我有以下说明:
a = (char) b;
知道 a
的类型是 char
而 b
的类型是 unsigned char
,该指令是否可以使 a
和 b
有不同的二进制表示?
类型 char
可以是有符号的或无符号的。 Char 类型没有填充,因此所有位都是值位。
如果
char
是无符号的,那么a
的值位将与b
的值位相同。如果
char
被签名,那么...- 如果
b
的值可以用char
表示,a
和b
的公共值位将相同。 - 否则,从无法表示的
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;
}