图形背后的数字世界,计算机是如何存储数据的?

↑↑ 点击上方蓝色字关注我↑↑

图形背后的数字世界,计算机是如何存储数据的?_第1张图片

如果你在大学学过计算机相关课程,那么你或许会知道:在我们漂亮的图形界面之下,其实所有的数据都是用 1 和 0 来表示的。对于机器来说,它们不懂得什么是图标,不懂得什么是红色,不懂得什么是网页,等等。对于机器来说,它们只认识两个数字:1 和 0。简单地说,1 和 0 就是数字世界的水和电。

在 1 和 0 之上,我们伟大的先贤们为了表示更大的数字发明了一套书值表示方法:原码、反码、补码。从这名字我们就可以感觉得出,其实这三个东西就是一种编码。按照特定规则,表示特定书值。

下面我们就来聊聊这三种最基础的编码方式。

原码

原码,其实就是符号位加上数字的二进制表示。不知道二进制的同学,自己先去百度吧。以 Java 中的 byte 类型为例,第 1 位表示符号位(正数或负数),其余 7 位表示该数字的二进制值。那么 10 的原码是:

10 的原码:0000 1010

原码的表示非常简单,就一个符号位和数值位组成。

反码

反码反码,意思就是在原码的基础上取反一下就是反码了。这就是反码的字面意思。

对于正数来说,它的反码与原码相同。对于负数来说,它的反码是在原码的基础上,符号位不变,其余位取反。

还是以 byte 类型的 10 为例,其原码与反码如下:

10 的原码:0000 1010

-10  的原码与反码如下:

-10 的原码:1000 1010

怎么样,弄懂了吗?不急着记,我们还有一个补码。

补码

补码补码,意思就是在反码的基础上修修补补就成了补码了。

对于正数来说,它的补码就是反码,其实也就是原码。而对于负数来说,它的补码就是反码加 1。

还是以 byte 类型的 10 为例,其原码、反码、补码如下:

10 的原码:0000 1010

-10 的原码、反码、补码如下:

-10 的原码:1000 1010

一路看下来,你会发觉计算机世界对于正数真是非常偏爱啊。基本上一个行头走遍天下,而负数这小伙子则是苦逼多了,每换一种表示方法,都要反一反,补一补,甚是可怜。

总结

图形背后的世界,其实就是一个个的 1 和 0,它们使用补码的方式存储。而补码又跟原码、反码有千丝万缕的联系。要知道补码,就得知道原码和反码。

正数的原码、反码、补码都一样,非常简单。负数的原码、反码、补码,略微复杂,但也不难记住。记住一句话就够了:反码就取反,补码就补1。

图形背后的数字世界,计算机是如何存储数据的?_第2张图片

今天的内容很简单,但却是计算机科学基础中的基础,弄清楚原码、反码、补码的意义和联系,可以为之后学习更深层次的内容打下良好基础。


推荐阅读

  • 不会排查线上问题?来学学这些命令吧!

  • 从字节码层面,解析 Java 布尔型的实现原理

  • 策略模式与SPI机制,到底有什么不同?

  • 如何写出别人看得懂的技术文章?

  • 技术与思维,哪个更重要?

640?wx_fmt=png

公众号@Java技术精选,关注 Java 程序员的个人成长,分享最新技术资讯与技术干货。与你成长有关的,我们这里都有。


↑↑创作不易,如果喜欢请转发↑↑


你可能感兴趣的:(图形背后的数字世界,计算机是如何存储数据的?)