为什么这个看似“随机”的数字会打印“JavaisAwesome”

这个程序如何打印“Java is Awesome”?

String s = IntStream.of(1635148106, 544434464, 1936029505, 6647151)
                    .flatMap(e -> IntStream.range(0, 4).map(i -> e >> i * 8))
                    .mapToObj(i -> Character.toString((byte) i))
                    .collect(Collectors.joining());
System.out.println(s);

回答

给你一点帮助:

01001010 01100001 01110110 01100001 (avaJ)
00100000 01101001 01110011 00100000 ( si )
01000001 01110111 01100101 01110011 (sewA)
01101111 01101101 01100101           (emo)

现在倒过来读:

01100001 01110110 01100001 01001010
00100000 01110011 01101001 00100000
01110011 01100101 01110111 01000001
00000000 01100101 01101101 01101111

这不过是:

1247901281
543781664
1098343795
1869440256


回答

所述IntStream.of(1635148106, 544434464, 1936029505, 6647151)创建了4个元素流。然后,对于这些元素中的每一个,我们将做

e -> IntStream.range(0, 4).map(i -> e >> i * 8)

这基本上创建了由操作产生的 4 个元素

e >> 0
e >> 8
e >> 16
e >> 24

因此,e -> IntStream.range(0, 4).map(i -> e >> i * 8)对元素的整个操作IntStream.of(1635148106, 544434464, 1936029505, 6647151)导致:

1635148106 6387297 24950 97
544434464  2126697 8307  32
1936029505 7562615 29541 115
6647151    25965   101   0
1635148106 6387297 24950 97
544434464  2126697 8307  32
1936029505 7562615 29541 115
6647151    25965   101   0
1635148106 6387297 24950 97
544434464  2126697 8307  32
1936029505 7562615 29541 115
6647151    25965   101   0

flatMap(...)部件将之前的操作转换为IntStream.

然后在接下来的操作中:

74 97 118 97 32 105 115 32 65 119 101 115 111 109 101 0
74 97 118 97
32 105 115 32
65 119 101 115
111 109 101 0
mapToObj(i -> Character.toString((byte) i))

(byte) i因此首先应用:

变成:

如果您查看 ASCII 表:

对应于:<

JAVA
<space>is<space>
Awes
ome<null>

/p>

剩下的操作:<

.mapToObj(i -> Character.toString((byte) i))
    .collect(Collectors.joining());

/p>

只需将其转换为String表示。

对于那些想知道如何从

你得到:

首先,将第一个元素转换为二进制,因为一个字节是 8 位,提取该二进制的最后 8 位,并将其转换回十进制。例如:<

1635148106

/p>

二进制是<

1100001011101100110000101001010

/p>

最后8位:<

01001010

/p>

十进制是74.

或转换为十六进制1635148106->6176614A确切相关部分(字节) ->4A并直接查看 ASCII 表 -> J


以上是为什么这个看似“随机”的数字会打印“JavaisAwesome”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>