栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

该如何打印“ hello world”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

该如何打印“ hello world”?

该数字

4946144450195624
适合64位,其二进制表示为:

 10001100100100111110111111110111101100011000010101000

程序从右到左为每个5位组解码一个字符

 00100|01100|10010|01111|10111|11111|01111|01100|01100|00101|01000   d  |  l  |  r  |  o  |  w  |     |  o  |  l  |  l  |  e  |  h

5位编码

对于5位,可以表示2 = 32个字符。英文字母包含26个字母,因此除字母外还留出32-26 =
6个符号的空间。通过这种编码方案,您可以拥有全部26个(一种情况)的英文字母和6个符号(其中是空格)。

算法说明

>>= 5
从组到组中的for循环跳跃,则5位组被分离安定与掩模的数目
31₁₀ = 11111₂
在句子
l & 31

现在,代码将5位值映射到其相应的7位ascii字符。这是棘手的部分,请检查下表中小写字母的二进制表示形式:

  ascii   |     ascii     |    ascii     |    algorithmcharacter | decimal value | binary value | 5-bit codification --------------------------------------------------------------  space   |       32      |   0100000    |      11111    a     |       97      |   1100001    |      00001    b     |       98      |   1100010    |      00010    c     |       99      |   1100011    |      00011    d     |      100      |   1100100    |      00100    e     |      101      |   1100101    |      00101    f     |      102      |   1100110    |      00110    g     |      103      |   1100111    |      00111    h     |      104      |   1101000    |      01000    i     |      105      |   1101001    |      01001    j     |      106      |   1101010    |      01010    k     |      107      |   1101011    |      01011    l     |      108      |   1101100    |      01100    m     |      109      |   1101101    |      01101    n     |      110      |   1101110    |      01110    o     |      111      |   1101111    |      01111    p     |      112      |   1110000    |      10000    q     |      113      |   1110001    |      10001    r     |      114      |   1110010    |      10010    s     |      115      |   1110011    |      10011    t     |      116      |   1110100    |      10100    u     |      117      |   1110101    |      10101    v     |      118      |   1110110    |      10110    w     |      119      |   1110111    |      10111    x     |      120      |   1111000    |      11000    y     |      121      |   1111001    |      11001    z     |      122      |   1111010    |      11010

在这里,您可以看到我们要映射的ascii字符以第7位和第6位设置(

11xxxxx₂
)开头(空格除外,该位置只有第6位),可以
OR
使用
96
96₁₀= 1100000₂
)进行5位编码,并且应该足以进行映射,但是这对于空间(无效空间!)不起作用

现在,我们知道必须特别注意与其他字符同时处理空间。为此,代码使用OR 64

64₁₀ = 1000000₂
l & 31 |64
)将提取的5位组的第7位(而不是第6位)打开。

到目前为止,5位组的形式为:(

10xxxxx₂
空格为
1011111₂ =95₁₀
)。如果我们可以将空间映射为不
0
影响其他值,则可以打开第6位,仅此而已。这是
mod 95
要发挥作用的部分,空格是
1011111₂ =95₁₀
,使用mod操作,
(l & 31 | 64) % 95)
只有空格返回到
0
,然后,代码通过将
32₁₀ = 100000₂

前一个结果加到第6位,
((l & 31 | 64) % 95) + 32)
将5位值转换为有效的ascii字符

isolates 5 bits --+          +---- takes 'space' (and only 'space') back to 0       |          |       v          v    (l & 31 | 64) % 95) + 32 ^^        turns the       ||      7th bit on ------++--- turns the 6th bit on

在给定小写字符串(最多12个字符)的情况下,以下代码执行相反的过程,返回可与OP的代码一起使用的64位长的值:

public class D {    public static void main(String... args) {        String v = "hello test";        int len = Math.min(12, v.length());        long res = 0L;        for (int i = 0; i < len; i++) { long c = (long) v.charAt(i) & 31; res |= ((((31 - c) / 31) * 31) | c) << 5 * i;        }        System.out.println(res);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号