6

为什么在下一个代码中c = 1

#include <stdio.h>

int main()
{
    int i = 65537;
    char c = (char)i;
    printf("c = %d\n",c); /* why c =1 */
    return(0);
}
4

4 回答 4

7

65537 是 0x10001(十六进制,10000000000000001 二进制)。如果将此值转换char为只有一个字节长的 ,您将只取 0x1001 中的最低(最低有效)字节,即十进制的 0x01 = 1。

于 2013-11-03T18:08:30.193 回答
5

Char 仅存储 1 个字节。通过分配c一个int值,只分配最低字节。

65537 = 256 * 256 + 1。

因此c = 1.

于 2013-11-03T18:07:23.120 回答
4

char 类型只有 8 位长,而 int 有 32 位。当您将一个 int 变量分配给一个 char 时,该值被削减到仅 8 个最低有效位。

65537 是二进制的10000000 000000001

所以,最低有效字节是00000001

于 2013-11-03T18:09:30.420 回答
0

这用于从 int 转换为 char: int i = 65537; 字符 c = (char)i;

前四个字节从 10000000000000001 投射到这里:这就是为什么如果你使用 65539(10000000000000011)它会变成 1,char 将是 3

于 2013-11-03T18:17:20.900 回答