为什么计算机在汇编语言中使用十六进制数字系统?他们为什么不使用二进制,八进制,十进制等任何其他数字系统?什么东西迫使计算机设计师在组装时使用十六进制系统为什么它对他们看起来如此有益?
答案 0 :(得分:10)
计算机不使用十六进制。计算机中没有处理十六进制值的组件。相反,计算机大多数情况下使用二进制值,数字“是”和“否”信息,表示为“施加电压”和“无电压”,也称为“hi”和“lo”,或“1”和“1”。 0"
但是因为向人类表示二进制数字作为0和1的字符串使得它们难以阅读,所以使用十六进制作为捷径:4位组(那些1和0信息)表示为一个十六进制数字。 这种从二进制到十六进制的转换非常简单。将二进制转换为十进制或十进制转换为二进制包含更多操作。
因此,十六进制系统不是由计算机使用,而是由人类使用,用于表示二进制数字,但比从/到十进制数字系统更容易转换。
十六进制数字具有另一个特征,使得它们优于十进制数:两个数字之间的变化仅涉及翻转一个或几个比特并不罕见。得到的十进制数看起来非常不同 - 更改位的值越高,越不同。在十六进制数字中,只有覆盖已更改位的数字会发生变化,其余数字会保留其值。这有助于在心理上将这些十六进制数字所代表的值分组。
除了十六进制是/八进制系统也经常使用。它的缺点是一个八进制数字仅描述一组3位,而不是4.因为计算机中的二进制数字(例如地址)通常具有2的幂范围,这些数字更适合组成四组而不是组三个。
没有人类“被迫”使用十六进制来组装。这只是一件方便的事情。
答案 1 :(得分:4)
在汇编语言中,通常从位生成数字并查看哪些位设置为特定数字通常很重要。
在C程序中也经常出现这种情况,如下例所示:
a = b&0xE0; // high 3 bits
c = b&0x1F; // low 5 bits
使用二进制数字并不像其他答案中所说的那样可读。但是,使用十进制数字不可能看到哪些位受到影响:
a = b&222; // which of these three instructions
a = b&224; // takes the high 3 bits?
a = b&226; // it is not easy to see!
当使用编号系统到2 ^ N(八进制或十六进制)的基数时,一个数字对应于某些位(而在十进制系统中,例如,十进制数中的一位数的改变可能会改变二进制数中的所有位) )。
八进制数的使用频率低于十六进制数。可能的原因可能是八进制数字代表3位,而十六进制数字代表4位。但是,现代计算机中使用的所有数据类型都使用4位的倍数。示例:A" uint16" number可以用4位十六进制数表示,而所有4位十六进制数字都可以用" uint16"表示。号。
答案 2 :(得分:2)
你代表他们的方式并没有什么不同但是我们知道人类不了解二进制数字,他们只是为了让计算机的生活更轻松,因为它只适用于两个国家是真是假。因此,为了使二进制数(指令)成为人类可读的,我们采用十六进制数字系统来表示汇编指令。它源于计算机的历史。
For example we can represent this binary number
11010101110100110010001100111010 in
hex as 0xd5d3233a
octal as 32564621472
decimal as 3587384122
正如您所看到的那样,人类可以轻松阅读并且不容易出错。十六进制值是最精确的。