我遇到了以下代码
#include <stdio.h>
int main(void)
{
long long P = 1,E = 2,T = 5,A = 61,L = 251,N = 3659,R = 271173410,G = 1479296389,
x[] = { G * R * E * E * T , P * L * A * N * E * T };
puts((char*)x);
return 0;
}
案件是我不太明白它是如何运作的,这让我非常困惑。有人可以详细解释一下吗?
编辑:还有一件事,如何打印&#34; Hola mundo!&#34; (&#34; Hello world&#34;西班牙语)类比?
答案 0 :(得分:8)
哦,这个很有趣。
显然,您声明了许多long long
个变量,以及一个包含2个单元格的long long
数组。因此,该数组由16个字节组成。
假设每个字节是一个ASCII
字符,则该数组代表16个字符(而最后一个字符可能为零)。你可以看到:
G * R * E * E * T = 1479296389 * 271173410 * 2 *2 * 5 = 8022916924116329800 =
0x6F57206F6C6C6548
P * L * A * N * E * T = 1 * 251 * 61 * 3659 * 2 * 5 = 560229490 =
0x21646C72
鉴于您的处理器为Little Endian,阵列的内存中表示形式为:
48 65 6C 6C 6F 20 57 6F 72 6C 64 21 00 00 00 00
ASCII中的Hello World!\x00\x00\x00\x00
。
答案 1 :(得分:2)
这是一个西班牙语版本:
int main(void)
{
int T=1, E=2, R=2, A=31, Q=784, L=70684, I=6590711, U=1181881,
x[] = { T*I*E*R*R*A, Q*U*E, T*A*L };
puts((char *) x);
return 0;
}