代码混淆不明白

Kev*_*vin 3 c

我遇到了以下代码

#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;
}
Run Code Online (Sandbox Code Playgroud)

案件是我不太明白它是如何工作的,这让我非常困惑.有人可以详细解释一下吗?

编辑:还有一件事,如何打印"Hola mundo!" (西班牙语中的"Hello world")类似地?

Mar*_*gal 8

哦,这个很有趣.显然,您声明了许多long long变量,以及一个long long包含2个单元格的数组.因此,该数组由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
Run Code Online (Sandbox Code Playgroud)

鉴于您的处理器是Little Endian,阵列的内存中表示是:

48 65 6C 6C 6F 20 57 6F 72 6C 64 21 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

这是Hello World!\x00\x00\x00\x00ASCII格式.