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

news/2024/11/28 21:00:18/

目录

  • 0与1的世界
    • 1.如何理解32位机器能够同时处理处理32位电路信号?
    • 2.如何理解负数的加减法运算
    • 3.溢出在运算中如何理解
    • 4.计算机种常用的存储单位及转换
    • 5.位移运算规则
    • 6.有趣的 && 和 &
  • 浮点数
    • 1.定点小数(为什么会出现浮点数表示?)

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.定点小数(为什么会出现浮点数表示?)


http://www.ppmy.cn/news/96087.html

相关文章

【C++学习第十二讲】C++ 常量

文章目录 一、前言二、整数常量三、浮点常量四、布尔常量五、字符常量六、字符串常量七、定义常量7.1 #define 预处理器7.2 const 关键字 一、前言 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&a…

C语言的历史和起源是什么?

C语言的历史和起源 C语言是一种广泛应用于系统软件、嵌入式系统和科学计算等领域的编程语言。它的起源可以追溯到上世纪70年代&#xff0c;由Dennis Ritchie在贝尔实验室开发出来。C语言的设计目标是提供一种简洁、高效、可移植的编程语言&#xff0c;以便于开发底层的系统软件…

ESP32-OTA

文章目录 1. 什么是OTA&#xff1f;2. OTA的基本原理3. ESP32远程OTA步骤&#xff1a;3.1 将需要升级的程序放在该目录下3.2 启动HTTP服务器3.3 配置3.4 烧录程序3.5 上电测试ESP32端 4. 问题&#xff1a;5. 通过命令控制OTA6. 参考&#xff1a; 1. 什么是OTA&#xff1f; OTA…

如何用 GPT-4 帮你写游戏(以24点游戏举例)

目录 给我一个24点游戏 游戏规则 GPT给的代码 ​改进 再改进 最近呢掀起了一阵GPT-4的热潮&#xff0c;很多人都想用GPT-4&#xff0c;这里呢我就打一个广告&#xff08;嘿嘿&#xff09;&#xff0c;如果不知道国内如何使用GPT的&#xff0c;可以看看这个博客&#xff1a;G…

动态分配内存new和delete

动态分配内存new和delete 栈&#xff1a;存储局部变量、函数参数和返回值。 栈区的效率很高&#xff0c;但是空间很小&#xff0c;如果需要处理大量的数据&#xff0c;就必须使用堆区的内存 动态分配内存new和delete 使用堆区的内存有四个步骤&#xff1a; 1&#xff09;声明…

网络规划与设计实验+配置案例报告+pkt

目录 第一部分&#xff1a;网络规划与设计实验..... 7 实验一 用户需求分析报告的撰写... 7 一、实验目的和要求... 7 二、实验内容... 7 三、实验步骤... 7 3.1 项目背景... 7 3.1.1 信息化发展趋势... 7 3.1.2 学校基本情况介绍... 8 3.1.3 学校对网络建设的基本要求…

Full-Scanner是一个多功能扫描工具,支持被动/主动信息收集,漏洞扫描工具联动,可导入POC和EXP

github项目地址&#xff1a;https://github.com/Zhao-sai-sai/Full-Scanner gitee项目地址&#xff1a;https://gitee.com/wZass/Full-Scanner 工具简介 做挖漏洞渗透测试有的时候要去用这个工具那个工具去找感觉麻烦我自己就写了一个简单的整合工具&#xff0c;有互联网大佬不…

Seata之@GlobalTransactional验证

下订单 -> 减库存 -> 扣余额 -> 改&#xff08;订单&#xff09;状态 1.数据库初始情况&#xff1a; 2.正常下单 http://localhost:2001/order/create?userId1&productId1&count10&money100 3.超时异常&#xff0c;没加GlobalTransactional 模拟Accou…