【发布时间】:2012-10-05 20:59:08
【问题描述】:
有人能解释一下为什么对以 0x0030 作为操作数的二进制数进行 OR 运算会产生该数字的 ASCII 字符吗?
【问题讨论】:
-
我明白为什么减去 0x0030 有效。
标签: assembly binary hex ascii bit-manipulation
有人能解释一下为什么对以 0x0030 作为操作数的二进制数进行 OR 运算会产生该数字的 ASCII 字符吗?
【问题讨论】:
标签: assembly binary hex ascii bit-manipulation
因为查看 ASCII 图表,数字 0 到 9 从 0x30 开始。所以你想要字符 1 的 ASCII 值吗? 0x30 或 0x01 = 0x31 = 数字 1 的 ASCII 值。
In binary it's easy to see:
(0x30) 110000
or
(0x01) 000001
= 110001
Which is 0x31 - ASCII value of 1.
【讨论】:
如果您指的是数字 0 到 9,原因是 0x30(或 48)是数字 0 的 ASCII 码。因为 48 只需要一个字节的高位(左手)位, 与任何低于 16 的数字(低位)进行或运算与在数学上添加数字相同。
所以 0x30 OR 0x01 将给出 0x31,即字符 '1' 的 ASCII 码,以此类推。
【讨论】:
查看单个数字的二进制表示:例如2d = 00000010b。对其应用 0x30 (00110000b) 的 OR 操作。这导致 00110010b 是 0x32 或 50d,这是 '2' 的 ASCII 码。实际上,在这种情况下(因为没有进位要考虑),OR 操作等于添加 0x30。
【讨论】: