《程序是怎样跑起来的》读书笔记 之 第二章 数据是用二进制表示的

1 热身

  1. 32位是多少字节?
    答:4四节(8位=1字节)。
  2. 二进制数左移动两位后,会变成原数的几倍?
    答:4倍,左移一位是原数的2的一次方倍,左移两位是原数的2的2次方倍。
  3. 补码形式表示的8位二进制数11111111,用十进制数表示是多少?
    答:-1。
  4. 反转部分图形模式时,用的是什么逻辑运算?
    答:XOR运算。

2 知识点

1. 为什么用二进制数来表示计算机信息?

答:计算机内部是由IC(集成电路)构成,IC的引脚,只有直流电压的0V或者5V两个状态。IC的这个特性,决定了计算机信息数据只能用二进制来处理。二进制数与IC的特性最为吻合。

2. 位?字节?

二进制数的位数一般是8位,16位,32位,64位。。。也就是8的倍数,是因为计算机所处理的信息的基本单位是8位的二进制数,即一个字节。所以,位是最小单位,字节是基本单位。多少位的处理器,表示有多少个引脚,表示一次可以处理多少位的二进制数信息。

3. 计算机处理数据时,如果一个四位的数字,要用8位的空间来存储这个数字,怎么存?

高位补上0即可;

4. 什么是二进制数?

首先,理解三个基本概念。十进制数字130中,多少进制,这个数字表示基数,0表示0 = 0 x 1, 3 = 3 x 10 , 1 = 1 x 100 ,这里的 1,10,100表示,也就是10的0次方,10的一次方,10的2次方。同理,二进制数也是如此。二进制数101=1x2的2次方+0x2的一次方+1x2的0次方。
总结:对于一个所有N进制的数=对应数位上的数值乘以对应数位的位权之和。

5. 为什么不同进制的数字通过位权的思想相加之后,都能准确地表示10进制中的一个数字呢?

在位权思想的大前提下,我们印象中的乘法和加法,都是基于十进制而实现的。这只不过是用十进制来表现位权的思想罢了。

6. 移位运算与乘除运算的关系?

移位运算:指将二进制数数值的各位数字进行左右移动的运算。显然的,往左(高位)移动移位以后,数值不变,但是数值对应的发生了变化( 新的权 = 原有权 x 基数的N次方),其中,N表示移动的位数。比如,对于一个8位的二进制数00000010,即(1*2+0*2),左移一位变成了00000100。通过位权的思想表示为:1(1*2*2)+0(1*2)+0(0*2) = 2(1*2+0*2),所以,相当于翻了一倍。
左移,用<<来表示,右移,用>>来表示。比如00000011<<2表示将00000011往高位移动2位。移位操作以后,高位或低位溢出的数字直接丢弃掉即可。
左移以后,低位的空位要补上0;
右移,略有不同。参照第10点。

7. 怎么用正数来表示负数?

二进制数中,要表示负数的时候,一般会把最高位作为符号位来使用,这个最高位称为符号位。符号位是0,则表示正数,符号位是1,则表示负数。但是这样以后,一个字节中,有效位数就只有7位了哦~
计算机在内部做减法运算的时候,实际上是做加法运算。
补数,就是用正数来表示负数。为啥叫补数呢,1+(-1),这个-1就叫做补数,把一个正数补为0。比如,要表示-1,那么,就是求1的补数,即00000001的补数。求补数的方法是:取反加1。而对于溢出的数位可以直接忽略掉。
计算机的内部计算结果,也是一个补数,比如,计算3-5的结果,计算过程为 :

 00000011
 00000011 +   //补数表示的-5
 ————————
 11111110    //运算结果为一个补数,再求一次补数,即可求得其绝对值
  
8. 高级语言中通常的short,int,long等数据类型,有啥区别?
  • 一次存取的位数不同。C语言中,short , unsigned short都表示2字节(16位)的变量。
  • 是否能处理负数。short,long最高位都用作符号位。
  • 值的范围不同。因为short最高位用作了符号位,short的有效范围是-32768~32767(在非负数上,2的15次方种值),而unsigned的有效取值范围是0~65536(在非负数上,可以取满2的16次方种值)。
9. 为什么-32768~32767这种取值范围中,负数比正数多了一个?
  • 实际上,这只是是理解上的问题。取值范围表示的是负数与非负数。取值范围中的表示有32768个负数,有32767+1个非负数。其中,0是非负数,它不需要补数也可以表示。
  • 还有一种理解方式。负数都是1开头的。而0和0以上的数都是0开头的,所以,在计算机中,0实际上是属于正数范围的。
10. 逻辑右移和算术右移?
  • 只有在右移的时候才需要区分逻辑右移与算术右移。
  • 逻辑右移:当二进制数的值表示图形模式而非数值时,右移后,需要在最高位补0,类似于霓虹灯往右滚动。。
  • 算术右移:将二进制数作为带符号的数值进行运算时,右移后,需要在最高位补满符号位的值。若是正数移位,则全补上0,若是负数移位,则全补上1。
11. 符号扩充怎么做?

符号扩充,指的是,将8位的二进制,在保持值不变的情况下,将其转变位16位或32位的二进制数。办法是:用符号位的值(0或1)填充满高位即可。比如,int类型的强转为16位的long,那么其实就是把01111111的高位填充满他的符号位,也就是0,所以结果为0000 0000 0111 1111,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值