码出高效_第一章 | 有意思的二进制表示及运算

0与1的世界

1.如何理解32位机器能够同时处理处理32位电路信号?

设想有8条电路,每条电路有高电平和低电平两种状态,即就有28=256种不同的信号。假设其表示区间为0~255,最大数即28-1。

那么32条电路能够表示最大数为(232-1)=4294967295,即所谓的32位电路信号。

2.如何理解负数的加减法运算

  • 正负数表示: 上面的8条电路,最左侧一条表示正负:0-整数,1-负数,不参与数值表示。8条电路表示数值范围 -128~127;

  • 二进制整数最终以补码表示: 整数原、反、补码都一样,负数补码为反码加1。
    (这样减法运算也可以用加法器实现,使用同一个运算器可减少中间变量的存储开销,降低了CPU内部的设计复杂度,符号位也参与运算)

3.溢出在运算中如何理解

如下图,计算结果需要9条电路表示,用8条电路来表达这个计算结果即溢出。(即在数值运算过程中,超出规定的表示范围)
在这里插入图片描述

4.计算机种常用的存储单位及转换

以上示例一条电路线在计算机种被称为1位,即1个bit(简写b)。

8个bit组成一个单位,称一个字节,即1个Byte(简写B)。

1024个Byte(简写为KB);1024个KB(简写为MB);1024个MB(简写为GB)。

5.位移运算规则

补充:

二进制整数最终以补码表示:正数(原、反、补都一样);负数(符号位与原码相同,数值位由原码取反+1)

例如:正数和负数的二进制表示(及十进制转二进制方法)

在这里插入图片描述
移动规则:

  1. 左移右移: 符号位参与移动,除负数向右移动,高位补1之外,其他情况均在空位处补0。

    向右移动1位近似表示除以2,但不完全是。十进制奇数转化为二进制后,向右移动时,最右边的1将被直接抹去,即右移对于奇数并非完全相当除以2。

    例如111(二进制) = 7(十进制),右移1位:11(二进制) = 3(十进制),这里也解释了除法中的向下取整。

    如下图,正数或者负数向左移动的结果可能是正数,也可能是负数。(高位添补规律图示)

在这里插入图片描述

  1. 无符号向右移动 >>>

    注意不存在 <<< 无符号向左移动。

    向右移动时,正负数高位均补0,正数不断向右移动的最小值是0,而负数不断向右移动的最小值是1。

    在这里插入图片描述
    为何负数不断向右移动最小值是1?(待补充)

6.有趣的 && 和 &

  1. 按位与(&) 、逻辑与(&&) 和 按位或(|)、逻辑或(||)

    区别:&& 有短路功能 ,例如:

    /**
     *  由于&&前边的表达式为false触发短路直接退出,最后结果:a = false ,b = true 
     */
    boolean a = true;
    boolean b = true;
    boolean c = (a=(1==2)) && (b=(1==2)) 
    
      /**
      *  最后结果:a = false ,b = false 
      */
     boolean a = true;
     boolean b = true;
     boolean c = (a=(1==2)) & (b=(1==2)) 
    

    同理,按位或(|)对应的逻辑或(||)也有短路的功能

     /**
      *  由于||前边的表达式为true触发短路直接退出,最后结果:e = true ,f = false 
      */
     boolean e = false;
     boolean f = false;
     boolean g = (e=(1==1)) || (f=(1==1)) 
    
    /**
      *  最后结果:e = true ,f = true
      */
     boolean e = false;
     boolean f = false;
     boolean g = (e=(1==1)) || (f=(1==1)) 
    

    注意:逻辑或、逻辑与只能对布尔类型的条件表达式进行运算

  2. 异或运算 ^

    异或运算没有短路功能,其运算:相同为0,不同为1

    例如:1^1=0; 10=1;truetrue=false;…

浮点数

1.定点小数(为什么会出现浮点数表示?)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小骄傲_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值