计算机基础,数字在计算机中是怎么表示的

数字是计算机最基础的,所有的基本原理在都是数字。不论你发送什么信息到编译器,最终都会转换为数字。比如,每一个字符在文本块中都是用一个数字表示的。图片也不例外,在计算机中,每个图片也是用一系列数字表示的。一张图片被分裂成许多成千的,甚至上万的基础图片元素叫像素,英文是 pixels,每一个像素是一个立方体的颜色。就像你的电脑屏幕,如果你凑近点使劲盯着看,也许你会看到这些颜色块。除非你有一块特别的高分辨率显示器,像素难以置信的小,每一个像素色块通常使用三个数字代表的。分别是:红、绿、蓝,比如一个纯红色表示就是 红100%、绿0%、蓝0%

数字在计算机中的工作和我们日常使用数字有一些不一样,日常我们都是使用十进制的计算。
举个例子:
平常我们使用的十进制,第一行是位数,第二行是数字625。先明确一点啊,十进制就是一位数可以用的数字是 0,1,2,3,4,5,6,7,8,9。不明白你得去看看数学。

1000100101
0625

怎么理解上面的数组呢?十进制嘛,那就是:(从右到左)
(5×10的0次幂)+(2×10的1次幂)+(6×10的2次幂)+(0×10的3次幂)
上面就是:
(5×1)+(2×10)+(6×100)+(0×1000) = 5+20+600+0 = 625

对于底数的次幂忘记了的记住wiki上的解释:当指数为1时,通常不写出来,因为运算出的值和底数的数值一样;指数为2时,可以读作“b的平方”;指数为3时,可以读作“b的立方”。

好了我们平常生活中的十进制就是上面这样读的,但是计算机不懂,它使用的是二进制。
首先你要明白二进制中,每个位数只能有两个数,就是0和1。不是上面的是个了哦,记住!

几乎所有的现代计算机都是使用的二进制,因为在物理级别,那非常容易去处理每个位数只有紧紧两个选择。要么0要么1.

说个题外话啊,在数字电子电路中,主要就是由一个计算机组成的,一个电气电压存在,就是1,不存在没有,就是0。这也是二进制。
还是按上面那个举例:

8421
1101

理解这段计算机懂的二进制数:
(1×2的0次幂)+(0×2的1次幂)+(1×2的2次幂)+(1×2的3次幂)
就是:
(1×1)+(0×2)+(1×4)+(1×8) = 1+0+4+8 = 13
如果你把1101转换成十进制的数,就是上面的次幂运算都把每位加起来,等于13,这个13就是十进制,对应的二进制1101。

上面要转换下我们平常的思维方式。

好,到这里,我们在看一个怎么把是一个十进制转换成二进制呢?比如423要转换成计算机能懂的二进制数。
我是这么考虑的,先把二进制的位数表搞出来。

2561286432168421
*********

*表示先空着不填
按照公式,最终423是每位要填的数,乘以第一行对应的进制数,相加得来的。
而且我们这里是要转为二进制,那么我们能填的就只有0和1了。

从左往右开始填,先写一个1,

2561286432168421
1********

这里423-256=167,比后面的128要大,还可以加一个128

2561286432168421
11*******

423-256-128=39,不能再加64了了,所以这里填0

2561286432168421
110******

接着,39比32大,不会超出,在32位这里填1

2561286432168421
1101*****

423-256-128-32=7,那后面的16位和8位都只能填0了

2561286432168421
110100***

最后面的3位,正好加起来是7,都是需要的,那么全部填1

2561286432168421
110100111

那么我们说将十进制数 423 转换成二进制数 是 110100111

在计算机中,存储一个我们平常的数 423,在计算机中其实是 以 二进制 110100111 存在的。

至于说你要问为什么只用到 256,就是2的8次幂呢,而不是 512 ,2的9次幂呢?

我这么理解的,因为2的9次幂就是512了,明显比423大嘛,那你不可能加了嘛。

有点绕,多看几遍吧。

计算机中把每一个数位叫做 bit 中文翻译叫“比特”,bit 是“二进制数位”的缩写。

8个bit,就是说8个数位,叫一个 byte 中文翻译叫“字节”

4个bit,就是说4个数位,叫一个 nibble ,中文翻译叫“半字节”

好了,再回来我们说说之前说的计算机。

计算机有限的存储器,意思是一般处理数字相当于有一个确定的数位长度。每一个寄存器,举个例子,一般是32位或是64位,那就是为什么我们常说32位或是64位的CUP了。

因此一个32位的CPU可以处理的最大数就是 4,294,967,295
转换成二进制就是 11111111111111111111111111111111

别忘记,之前讲计算机怎么工作的文章里面,CUP从RAM里面pull讲值拉到寄存器中,然后放到算术单元进行计算,将结果再放入其他的寄存器中,然后返回给RAM的过程哦。

有可能极端及处理了一个超出CPU最高范围的数字,计算机会把这个过长的二进制数超出的数位砍断,多出来不要的,那么这个计算就会不准确哦。编程中要避免出现这样情况。

哎哟~我写得好累了~~~~
最后一点,十六进制:
同理类推啊~

4096256161
****

可以用的数字有十六个:
0,1,2,3,4,5,6,7,8,9,a(10),b(11),c(12),d(13),e(14),f(15)

最后举个例子:

4096256161
c0de

c×16的3次幂 + 0×16的2次幂 + d×16的1次幂 + e×16的0次幂
也就是:

12×16的3次幂 + 0×16的2次幂 + 13×16的1次幂 + 14×16的0次幂
也就是:

12×4096 + 0×256 + 13×16 + 14×1 = 49374

顺带最后说一下,十六进制是非常重要的。因为每一个十六进制的数位可以代表精确恰好的二进制数位。比如二进制的 1111 等价于 十六进制的 f(15)。
你可以简单的连接二进制对应的每一个十六进制数位
在同等的设备情况下,创建一个十六进制数比一个二进制数或十进制数更短。

它们对应的:
c = 1100
0 = 0000
d = 1101
e = 1110

也就是说:
c0de = 1100 0000 1101 1110

很快吧,这个是非常有用的,回想一下之前的最长的32位数,十进制是 4,294,967,295 ,二进制是 11111111111111111111111111111111 ,
如果是十六进制
ffffffff
这会显得更紧凑和清晰。

计算机有许多的约束,它们仅能做一些很小的事情,计算机的能力直到通过编码才强大起来。它把这些小的事情集合到一起,用正确的命令,去产生更强大的事情。

编码其实就像你在写一份菜谱,你将材料聚集好,对应计算机就是数据。然后让计算机一步一步的按照菜谱去做就好了。

每一种编程语言都是这么去做的。编译器会将你编写的代码翻译成计算机能够明白的指令,然后CPU去执行。

    原文作者:GaryCat
    原文地址: https://blog.csdn.net/woiwhh/article/details/52611241
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞