你知道 1 + 1 等于几吗?

阅读本文需要 4 分钟

前言

当有人问你1 + 1等于几的时候,你会觉着这是对你的一种侮辱,这种弱智问题,居然拿来问我。。。。听起来好像你说的没错,1 + 1是挺简单的,可是如果让你证明的话,可能你这一辈子都证明不出来。。。

稍微知道一点的人,可能会联想到我国著名科学家陈锦润为了证明1 + 1 = 2,用了几个麻袋的草稿纸的故事,并且最终证明出来了!当然这点是值得我们骄傲的事,但是事实上陈锦润只是证明了1 + 2 = 3,历史上最著名的猜想:哥赫巴德猜想——1 + 1为什么等于2,至今无人证明出来。

我们今天当然不谈怎么证1 + 1 = 2,我们说的是:你知道在计算机里为什么1 + 1 = 2吗?

进制问题

众所周知,计算机不像人的大脑,只认识0,1代码,所有的操作,最后汇聚到计算机底层时,都是0,1代码.而怎么将人类能识别的数字转化成计算机识别的0,1代码,计算机又是是怎么将十进制的1,2,3,4,5转化为二进制的0,1的呢?

进制转化

科班出身的在遇到进制转化时,都会心中默念四个字:8,4,2,1。这是什么意思呢?

原来在二进制下,以四个字节为例,1111,从右往左,第一个1转化为十进制就是1,第二个1转化为10进制就是2,第三个1转换为10进制就是4,最后一个就是8,可以发现第几位出现1,就意味着转化为10进制下2的几次方,同理当有8字节时,1111 1111,第八个位置上的1表示的就是128

而十进制转化为2进制要怎么转换呢?

只需要将10进制下的数字通过8421法,来进行一一对应就好了,如7,转换为二进制就是0111

计算机是怎么知道 1 + 1 = 2 的?

在计算机里面,加法是一个很好做的事情,有了加法就不需要减法,因为减法可以看做加上一个负数,所以计算机就只设计了一个加法器,并没有单独设计一个减法器,而乘法和除法对计算机而言,相对来说难度就高很多。

那么问题来了,在加法里面,计算机是怎么表示一个数的负数呢?

前面说到,无论是什么,最终在计算机里面都是0,1代码,也就是说,寻常意义下的数字1,在计算机里是一串 0,1代码,而这里的0,1代码并不是只是直接的二进制数,在计算机里面,所有数都有三种表达形式:

+1

原码: 1 : 0000 0001
反码: 1 : 0000 0001
补码: 1 : 0000 0001

-1

原码: -1 : 1000 0001
反码: -1 : 1111 1110
补码: -1 : 1111 1111

在计算机中,原码就是转换过来的二进制数,而正数和负数的区别在于最高位,计算机用最高位来当做符号位,0表示正数,1表示负数。

正数: 原码 = 反码 = 补码

负数: 反码 = 原码符号位不变,其他位取反,补码 = 反码 +1

理解了数字在计算机中是怎么表示的,就好理解计算机是怎么计算1 + 1的了。

在计算机中,所有操作数都是以其补码的形式进行计算,若要返回其非二进制的结果,则需要将补码转换为原码,再通过进制转换,转换成理想的答案

+1

补码: 0000 0001

+1 

补码: 0000 0001

1 + 1 =

补码: 0000 0010

原码: 0000 0010

转换成十进制:

2

故 1 + 1 = 2

这样才是计算机里面在遇到1 + 1时进行的底层操作。

而一般的乘法,如简单的偶数倍:

5 × 2

在计算机里都是通过位运算进行计算的,并且位运算的速度非常之快。

+5

补码: 0000 0101

5 × 2 =

0000 0101 << 1 # 将整体向左移一位

补码: 0000 1010

原码: 0000 1010

转化为十进制:

105 × 2 = 10

可以看到通过位运算,可以快速进行乘法运算。

结语

虽然底层知识基本上是用不到,但是了解一些计算机在底层究竟是怎么运行的,可以帮助我们理解程序在计算机上究竟是怎么跑起来的。

虽然现在轮子是很多,平时也很少会遇到自己造轮子的时候,但是想要成为一个程序员,而非码农,了解一些底层知识,了解如何造轮子是很有必要的一件事。

正如孔子所说:知其然知其所以然。

您的一次关注就足以让我感动!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值