【问题标题】:Xoring alphabet letters with space character带空格字符的异或字母
【发布时间】:2012-03-28 11:00:53
【问题描述】:

为什么用空格字符异或任何字母会改变字母的大小写是否有历史原因? (即 'a' xor ' ' = 'A'、'F' xor ' ' = 'f' 等...)

或者这只是巧合?

(假设字符是 ASCII 或 unicode 编码的。)

【问题讨论】:

  • 它也恰好在 EBCDIC 中工作。

标签: unicode ascii xor


【解决方案1】:

在 ASCII 中,大写字母是从 A = 100.0001 开始的连续二进制数,而小写字母是从 a = 110.0001 开始的连续二进制数.换句话说,可以通过翻转第二位来更改字母的大小写。翻转第二位相当于与 010.0000 进行按位异或。这恰好是空格字符的 ASCII 表示。

正如其他人所指出的,大写和小写字母仅相差一点点肯定是故意的。由此可见,将任何字母与该位中的 1 和每隔一个位中的 0 表示的字符进行异或运算将翻转其大小写。但这似乎不太可能是 原因 将空格字符分配给 010.0000。如果 010.0000 是句点、美元符号、数字 0 或任何其他字符更有意义,那么使用 XOR 翻转字母的大小写仍然同样容易,使用该字符是.

(请注意,我只是使用二进制数中的句点来对位进行分组,以使它们更易于阅读。它们没有任何其他意义。)

【讨论】:

    【解决方案2】:

    这不是巧合,它总是如此。

       Example:  hex of 'a' = 61  hex of space = 20 XOR 'a' and space = 41 = 'A' (in hex)
       same as:  hex of 'z' = 7A  hex of space = 20 XOR 'z' and space = 5A = 'Z' (in hex)
    

    【讨论】:

      【解决方案3】:

      这只是 ASCII 字母和其他一些以类似方式分配的字母集的一个特征。对于 Unicode 中的绝大多数字母字符,它不会发生。例如,Ā 是 U+0100,ā 是 U+0101。通常,小写和大写字母通常分配给连续的代码位置。并且 Unicode 中的大多数字母字符都没有小写/大写的概念。

      【讨论】:

        【解决方案4】:

        好点

        ASCII 是机电式电传打字机使用的代码的子代,通常以 Teletype 品牌而闻名。

        这些机器没有有源电子设备……它们使用鼓、马达和凸轮以及大约数不清的金属部件来打印大写字符。他们有一些 RLC 组件和各种继电器。

        大写和小写字符之间只有一位分隔符是经过深思熟虑的。这样传输和存储系统可以使用 6 位而不是 7 位。

        其实你不需要XOR,你可以使用OR或者ADD来获取小写范围。

        通过简单地忽略一位,只能打印大写字母的设备能够处理混合大小写输入。在空格字符中使用该位是有道理的……在类型元素选择方面通常会忽略这一位。

        Here is a quite old one restored to working order.

        【讨论】:

        • 在很多只使用大写字母的设备上,shift 键会无条件切换第 4 位,从而将“1”变成“!”,“/”变成“?”,“P”变成“@” ”,顺便把“Q”变成了“A”。在具有大写小写字母的设备上,shift 键将切换位 6 的值的位 4,如果位 6 被设置,则切换位 5。比使用每个键的查找表要容易得多。
        【解决方案5】:

        来自 ASCII 上的维基百科条目:

        代码本身是经过设计的,因此大多数控制代码都是 在一起,所有图形代码都在一起,以便于 鉴别。前两列(32 个位置)保留给 控制字符。[19] “空格”字符必须在前面 图形使排序更容易,所以它变成了位置 20hex;[20] 为 同理,许多常用作分隔符的特殊符号 放在数字之前。委员会认为重要的是 支持大写 64 个字符的字母,并选择了 ASCII 模式 因此它可以很容易地简化为可用的 64 个字符的图形集 代码。[21]因此,小写字母不与 大写。保留可用于小写字母和其他字母的选项 图形,特殊和数字代码被安排在前面 字母,并且字母“A”被放置在位置 41hex 以匹配 相应的英国标准草案。 [22]数字 0-9 是 排列成它们对应于以 011 为前缀的二进制值, 使二进制编码的十进制转换变得简单。

        看来这种行为是巧合。

        【讨论】:

          【解决方案6】:

          我敢肯定,可以通过更改一个位来更改案例是经过深思熟虑的 - 这将使早期的软件更加高效。空格字符是#32这一事实无关紧要。

          【讨论】:

            猜你喜欢
            • 2020-10-20
            • 2011-02-24
            • 2019-01-24
            • 1970-01-01
            • 2011-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-03
            相关资源
            最近更新 更多