关闭

Poedu_计算机基础_lesson02_20160826_二进制

标签: 二进制
81人阅读 评论(0) 收藏 举报
分类:

======================仰望星空 脚踏实地==========================
======================      lesson02         ==========================

1.复习

   1)CPU的组成

   2)二进制的基础演算

2.二进制的运算

  1)加法:较为简单==>逢二进一

  2)减法:变为加上一个负数(计算机做不了减法)

            =>问题:那么计算机应该如何表示负数

              =>解决办法:规定一个固定的长度表示数值,拿最前面的一个引脚(位)表示符号(0正1负)

                =>出现问题:3+(-1)=0011+1001=1100=-4    (显然不对)

                   =>解决办法:补数

                    =>即:当为负数时,确定数值长度,取反(除符号位外,1变0,0变1)加1,再与另一数进行加法运算可得正确值。为什么可行?

                     =>计算机不会借位,溢出的会抛掉,例如3+(-1)      (-1)的二进制表示为1001,取反得1110,加1得1111(补数)

                       =>所以3+(-1)=0011+1111=0010=(-2)   (若你得到的值是10010,请记得,将超出长度那位的值抛掉)

                  =>关于补码(数):补码中的1000不代表-0,所代表的是当前能够代表的最小负数; 0没有补码。

                   =>在8位中,11111111 是最大的负数(-1)  10000000是最小的负数(-128)

 3)乘法:通过左移实现:左边超出长度的数值抛掉,右边缺少数值的位用0补充

               =>例:3>>2(左移2位)   0011>>2=1100=12=3*2^2

                 =>即:左移几位等于乘于几个2

 4)除法:通过右移实现  即除于2^n

               =>但是当数值为负数时,例如:1100右移2位  会变成0011  显然不对(负数变正数了)

                =>对于除法有两种情况:算术右移和逻辑右移

                 =>算术右移:根据首位(符号位)补1或0  即:1100>>2=1111  即从(-4)变为(-1) 符合规则

                 =>逻辑右移:不管符号位,直接往右移n位,空位补0   如:1100>>2=0011 运用:LED屏流动文字/图像的实现

 5)逻辑运算 ==>通过电路门实现

       5.1 逻辑非:(not)   即1变0,0变1

       5.2 逻辑与:(and) 两者都为1时为1  0&&0=0 、0&&1=0、1&&1=1

       5.3 逻辑或:(or) 二者之间至少有一个为1,值就为1  0||0=0、0||1=1、1||1=1

       5.4 逻辑异或:(xor) 两者数值不同时为真   00=0、11=0 、10=1

 6)二进制表示浮点数(了解)

      例(部分代码):

             for(int i=0;i<100;i++)

            {

                 sum+=0.1;

             }

        程序运行结果为sum=10.00002 ==>计算机计算浮点数很难达到准确,有部分准确(小数部分能被2^(-1)或2^(-2)......整除时)

  对于此问题的处理方式:

       =>安全的运算:不拿小数运算,如上例中,sum+=0.1*10,printf("%f",sum/10);

      =>不管后面的   (不推荐这种方式)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5335次
    • 积分:649
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条