有没有历史原因为什么Xoring任何带空格字母的字母字母会改变字母的大小写? (即'a'xor''='A','F'xor''='f'等......)
或者这只是一个巧合?
(假设字符是ASCII或unicode编码的。)
答案 0 :(得分:17)
我确信故意通过改变一个位来改变案例 - 这将使早期软件更有效率。空格字符为#32的事实无关紧要。
答案 1 :(得分:10)
来自ASCII上的维基百科条目:
代码本身已经过图案化,因此大多数控制代码都是 在一起,和所有的图形代码在一起,为了方便 鉴定。前两列(32个位置)保留用于 控制人物。[19] “空间”角色必须来到之前 图形使排序更容易,所以它成为位置20hex; [20]为 同样的原因,许多通常用作隔板的特殊标志是 放在数字之前。委员会认为重要的是 支持大写64个字符的字母表,并选择模式ASCII 因此可以轻松地将其缩小为可用的64个字符的图形集 码。[21]因此,小写字母不与之交错 大写。保留小写字母和其他字母的选项 图形,特殊和数字代码安排在之前 字母和字母“A”被放置在位置41hex以匹配 相应的英国标准草案。[22]数字0-9是 因此它们对应于前缀为011的二进制值, 用二进制编码的十进制直接转换。
所以这种行为似乎很巧合。
答案 2 :(得分:4)
ASCII是电子机械电传打字机所使用的代码的子代,通常称为Teletype品牌。
这些机器没有有源电子设备......他们使用鼓,电机和凸轮以及大量金属部件来打印大写字符。他们有一些RLC组件和各种继电器。
这是非常慎重的,只有一个位分隔大写和小写字符。这样传输和存储系统可以使用6位而不是7位。
事实上,您不需要XOR,您可以使用OR或ADD来获得小写范围。
通过简单地忽略一位,只能打印大写的设备能够处理混合大小写输入。有意义的是,这个位将用在空格字符中...它在类型元素选择方面通常被忽略。
答案 3 :(得分:1)
这只是ASCII字母的一个特征,以及以类似方式分配的一些其他字母集。对于Unicode中的绝大多数字母字符,它不会发生。例如,Â是U + 0100,ā是U + 0101。通常,小写和大写字母通常被分配给连续的代码位置。 Unicode中的大多数字母字符都没有小写/大写概念。
答案 4 :(得分:0)
这不是巧合,总是如此。
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)
答案 5 :(得分:0)
在ASCII中,大写字母是从A = 1 0 0.0001开始的连续二进制数字,而小写字母是从a = 1 1 0.0001开始的连续二进制数字。 。换句话说,可以通过翻转第二位来改变字母的大小写。翻转第二位等效于与010.0000的按位XOR。碰巧是空格字符的ASCII表示。
正如其他人所指出的,肯定是故意的,大写字母和小写字母仅相差一点。由此可见,将任何字母与该位置上的1和其他位置上的0表示的字符进行异或运算将翻转其大小写。但这似乎不太可能是 reason 空格字符分配给010.0000的原因。如果将010.0000用作一个句点,美元符号,数字0或任何其他字符更有意义,那么使用该字符将XOR转换为字母也同样容易。
(请注意,我只是使用二进制数内的句点对位进行分组,以使其更易于阅读。它们没有任何其他意义。)