汇编语言程序员处理的是物理级数据,因此他们必须善于检查内存和寄存器。通常,二进制数被用于描述计算机内存的内容;有时也使用十进制和十六进制数。所以必须熟练掌握数字格式,以便快速地进行数字的格式转换。 每一种数制格式或系统,都有一个基数(base),也就是可以分配给单一数字的最大符号数。下表给岀了数制系统内可能的数字,这些系统是硬件和软件手册中最常使用的。
系统 | 基数 | 可能的数字 |
---|---|---|
二进制 | 2 | 01 |
八进制 | 8 | 01234567 |
十进制 | 10 | 0123456789 |
十六进制 | 16 | 0123456789ABCDEF |
计算机以电子电荷集合的形式在内存中保存指令和数据。大家可以理解为电灯的开和关,分别代表1和0。二进制数(binary number)用 2 个数字作基础,其中每一个二进制数字(称为位,bit)不是 0 就是 1(和电灯一样,不是开就是关)。
位自右向左,从 0 开始顺序增量编号。左边的位称为最高有效位(Most Significant Bit, MSB)右边的位称为最低有效位(LSB, least significant bit)。一个 16 位的二进制数,其 MSB 和 LSB 如下图所示:
二进制整数,又可以分为有符号和无符号(即是否能表示整数和负数)。对于无符号整数来说,默认看作正数,就算你存入负数也会被解析成正数,对于有符号来说,既能表示正数,也能表示负数,不过相对应的,能表示的范围也要小一点,因为最高位被用来表示符号位,从而使能表示的有效数据少了。
学过C语言的都知道char的存储范围是[-128~127],而uchar的存储范围是[0~256],这就是区别。
各种进制之间的转换鉴于大家都学过C语言,所以在各种进制之间的转换上面,就不花精力详细介绍了,给大家一张详细的转换方法图:
最小信息表示单位(byte)计算机中,所有数据存储的基本单位都是字节(byte),一个字节有 8 位(八个二进制),其他的存储单位还有字(word)(2 个字节),双字(doubleword)(4 个字节)和四字(quadword)(8 个字节)。
下图展示了每个存储单位所包含的位的个数:
怎么计算不同的类型的取值范围呢?
无符号整数:0~2^n (n代表类型的位数)
有符号整数:-2^(n-1)+1 ~ +2^(n-1)
用知识思考问题,为什么买的硬盘内存会少一些?首先,不是卖硬盘的商家是奸商,而是和计算机的存储单位换算不同导致的。
然后,大家都知道
1字节 = 8位
1千字节 = 2^10或1024字节
...后面每个相邻的单位之间,都是以1024进行换算
大家注意到没有,单位本来因该是1024,但是商家却为了方便,丢掉了24,仅用1000来计算,那么当内存很大的时候,我们丢失的空间就越大。
我们一起来算一下,以128G为例(2^7):
商家:128 ×1000 × 1000 × 1000 =128,000,000,000(byte)
计算机:128 × 1024 × 1024 × 1024 =137,438,953,472(byte)
差值:137,438,953,472-128,000,000,000=9,438,953,472
9,438,953,472/1024/1024/1024=8.79G
这一下就少了块9个GB了,天啦~~
更快的换算方法:通过商家的单位计算出字节之后,然后按计算的的单位求出GB。
128,000,000,000/1024/1024/1024=119.2092895507813
128-119.2092895507813=8.79072
怎么样,你明白了吗,喜欢的不如点个“在看”吧