从 int 到 unsigned short 的转换

-3 c type-conversion

这是我不理解的 C 程序的一部分:

unsigned short twittlen;
int x;

x = atoi(argv[1]);
twittlen = x;

if(twittlen >= 64) {
    printf("Nope , You don't know about Integer");
    return -1;
}

if (x >= 64 ) 
    printf("you got it ");
Run Code Online (Sandbox Code Playgroud)

我的问题是如何找到一个大于 64 的 int 但将其转换为 unsigned short 时它将小于 64 !即使在stackoverflow上,我也看了很多关于这些类型整数的限制,但我没有找到答案!提前致谢 :)

Jon*_*art 6

当你分配int一个值unsigned short截断会发生。

假设int是 4 字节,short是 2,你只需要给程序提供一个大于 64 的值,其低两个字节小于 64。

最大的无符号 16 位值为 65535:

0x0000FFFF
Run Code Online (Sandbox Code Playgroud)

因此,如果您输入数字 65536:

0x00010000
Run Code Online (Sandbox Code Playgroud)

当截断为两个字节时:

0x0000
Run Code Online (Sandbox Code Playgroud)

是零。