为什么在下一个代码中c = 1
?
#include <stdio.h>
int main()
{
int i = 65537;
char c = (char)i;
printf("c = %d\n",c); /* why c =1 */
return(0);
}
为什么在下一个代码中c = 1
?
#include <stdio.h>
int main()
{
int i = 65537;
char c = (char)i;
printf("c = %d\n",c); /* why c =1 */
return(0);
}
65537 是 0x10001(十六进制,10000000000000001 二进制)。如果将此值转换char
为只有一个字节长的 ,您将只取 0x1001 中的最低(最低有效)字节,即十进制的 0x01 = 1。
Char 仅存储 1 个字节。通过分配c
一个int
值,只分配最低字节。
65537 = 256 * 256 + 1。
因此c = 1.
char 类型只有 8 位长,而 int 有 32 位。当您将一个 int 变量分配给一个 char 时,该值被削减到仅 8 个最低有效位。
65537 是二进制的10000000 000000001
所以,最低有效字节是00000001
这用于从 int 转换为 char: int i = 65537; 字符 c = (char)i;
前四个字节从 10000000000000001 投射到这里:这就是为什么如果你使用 65539(10000000000000011)它会变成 1,char 将是 3