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

6 c

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

#include <stdio.h>

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

m0s*_*it0 7

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


Stu*_*tLC 5

Char只存储1个字节.通过分配c一个int值,最低的只有一个字节分配.

65537 = 256*256 + 1.

于是 c = 1.