《程序是怎样跑起来的》——数据是用二进制数表示的

1. 32 位是几个字节 ?

我:2的5次方=32,5个。
2. 二进制数 01011100 转换成十进制数是多少?

我:懒得算。
3. 二进制数 00001111 左移两位后,会变成原数的几倍?

我:2的2次方=4倍
4.  补码形式表示的 8 位二进制数 11111111,用十进制数表示
的话是多少?

我:补码啥意思
5.  补码形式表示的 8 位二进制数 10101010,用 16 位的二进
制数表示的话是多少?
6. 反转部分图形模式时,使用的是什么逻辑运算?

我:图形模式啥意思?应该是取补?

正确答案:

1. 4 字节(我哭)
2. 92
3. 4 倍
4. -1
5. 1111111110101010
6. XOR 运算

1.计算机如何处理二进制数?

举例: 00100111 这样的二进制数,既可以视为纯粹的数值作加法运算,也可以视为单引号而显示在显示器上,或者视为■■□■■□□□这一图形模式印刷出来。具体进行何种处理,取决于程序的编写方式。

2.负数的表示?

补数(取反+1),符号位1。

第二章内容比较浅,因此把第三章的小数表示内容也放上来。

1.问题:为什么在程序里,100次0.1的累加不等于10?

答案:计算机需要把十进制小数0.1转换成二进制小数,而后者会是一个无限循环二进制小数,最终只能取近似。

2.问题: 什么是浮点数?

看图说话,这不就是科学计数法吗?基数是2。而尾数、指数就比较复杂了。

尾数部分:正则表达式(整数部分的第一位是1)

指数部分:EXCESS系统表现使得负数不需要符号表示。相当于强行把最小负数校正为0。

最后举个例子:
十进制数 0.75 用单精度浮点数来表示就变成了0-01111110-10000000000000000000000。加入破折号(-)是为了区分符号部分、指数部分、尾数部分。这里,符号部分为 0,指数部
分为 01111110,尾数部分为 10000000000000000000000。因为 0.75 是正数,所以符号位是 0。指数部分的 01111110 是十进制数 126,用EXCESS 系统表现就是- 1(126- 127 = - 1)。根据正则表达式的规则,小数点前面的第 1 位是 1(这里也是节省空间的原因,具体为什么要回去看书),因此尾数部分 10000000000000000000000 实
际上表示的是 1.10000000000000000000000 这个二进制数。将尾数部分的二进制数转换成十进制数,结果就是(1 × 2 的 0 次幂)+(1 × 2 的-1次幂) = 1.5。因此,0-01111110-10000000000000000000000 这个单精度浮点数,表示的就是“+ 1.5 × 2 的-1 次幂”。2 的-1 次幂是 0.5,+ 1.5× 0.5 = + 0.75。正好吻合,结果正确。

总结】看完第三章,有一种入门密码学的冲动。以前不知道计算机内部的小数表示居然是这样设计的以及为什么这样设计,看完还是觉得很有意思。我们永远是站在前人的肩膀上行走啊。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值