速通CSAPP(二)信息的表示和处理

Ch2. 信息的表示与处理

说实话,这部分的东西我到大四了,我觉得我看过不下10遍了。原码反码补码浮点运算之类的。

本章重点主要包括三种数:

无符号数:表示大于等于零的数。

有符号数:通常用补码表示。

浮点数:小数。

CSAPP 主要讲解 C C++ 的数据表示方法,java 有些不同。

内存空间

计算机寻址并不是按一个个二进制位来找的,通常是8位二进制位组成的一个字节是最小的寻址单元。

内存可以被视作一个字节数组,虚拟内存。每个字节都有一定的地址序列来唯一标识这个字节。所有可能的地址集合就是虚拟地址空间。

计算机处理数据的单位是一个字。比如32位计算机是4字节为一个字。

原码 反码 补码 浮点数

三种码和浮点数可以阅读博主的这篇文章:

计算机组成原理_4 各种码的作用,及乘除运算_乘积高位和乘积低位是什么意思-CSDN博客

了解三种码的功能是最重要的。

原码:表示二进制数,但是需要单独表示正负号,而且会出现正负零的问题。

反码:可以表示正负数,可以进行不溢出的正负数运算,但是也会出现正负零的问题。

补码:可以进行溢出的运算,避免正负零问题。补码类似时钟,指针指到12点其实又变成从0开始了。

下面是几个位操作的例题,有助于帮助发掘计算机的运算思维和人的区别:

image-20231127113027276

x 假设是4字节长度的数据。

  1. x<0,x*2不一定<0,可能溢出了。
  2. unsigned x 确实>=0.
  3. x后三位=1,x左移30次,得到1100000……00,第一位是1,是负数。
  4. 同2,对。
  5. 主要是负数最小值 Tmin,也就是 100000……00 的负数还是他自己。所以不一定成立。
  6. x*x 也是可能溢出,错误。
  7. x+y 也可能溢出,错误。
  8. 对。
  9. 错,因为 Tmin 的负数还是自己。所以正数取反一定是负数,负数取反有一个特例。
  10. 特例是0,错。不过对于其他例子,这都是成立的。
  11. 对。
  12. 错,符号位变了。
  13. x=Tmin 时,错误。

可见有一些东西人算的时候觉得肯定正确(x平方>=0),但是计算机他对数据处理能力有限,容易发生溢出造成错误答案。

字节序

字节数据顺序,比如我有11100010这个数据,发送给对方,是按 01000111 顺序发,还是 11100010 顺序?

发送数据是从低地址往高地址逐个发送。

大端序:权重大的位在低地址。所以发送顺序就是11100010.

小端序:权重小的位在低地址。发送顺序是01000111.

浮点数

小数点后面的每一位权重是2-1,2-2,2-3……

1701056555629

注意,浮点数能表示的精度范围有限,所以会出现很多甚至都不满足加法乘法结合律的运算例子。

1701056805180

结合律中,3.14相比1e10太小了,求和后这部分精度被省去了。

分配律中,1e20*1e20已经太大溢出了。

理解了以上内容,在自己开发过程中才会想到更优解或者避免一些奇怪的问题。比如二分法经典的 mid=(low+high)/2 ,真正安全的做法是 mid=(high-low)/2+low ,因为 high+low 可能溢出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/195633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

好用的IDEA插件推荐

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…

CH58x-BLE 程序阅读笔记

CH58x-BLE 程序阅读笔记 1. 广播1.1 广播类型设置1.2 广播数据长度 1. 广播 1.1 广播类型设置 1.2 广播数据长度 1&#xff09; GAP-广播数据&#xff08;最大大小31字节&#xff0c;但最好保持较短以节省广告时的电量&#xff09; 31个字节包含了 length data type&a…

python爱心代码高级

在Python中&#xff0c;我们可以使用matplotlib库来创建一个更高级的爱心图形。以下是一个示例&#xff1a; import matplotlib.pyplot as pltimport numpy as npx np.linspace(-2, 2, 1000)y1 np.sqrt(1-(abs(x)-1)**2)y2 -3*np.sqrt(1-(abs(x)/2)**0.5)fig, ax plt.subp…

RandomAccessFile学习笔记

文章目录 RandomAccessFile学习笔记前言1、RandomAccessFile基本介绍1.1 RandomAccessFile相关基本概念1.2 RandomAccessFile家族体系 2、RandomAccessFile基本使用2.1 RandomAccessFile常用API介绍2.2 RandomAccessFile常用API演示2.3 RandomAccessFile实现断点续传 1、Random…

cadence virtuoso simulation文件夹删除

ADE XL仿真结果错误&#xff0c;与预期结果差别太大&#xff0c;与ADE L仿真结果也差别很大。 可能是由于仿真数据过多&#xff0c;卡爆了。 在virtuoso启动路径下&#xff0c;simulation文件夹是仿真过程文件&#xff0c;可以将此文件夹清空。 清空后ADE XL仿真结果正常了。…

Snagit 2024.0.1(Mac屏幕截图软件)

Snagit 2024是一款屏幕截图工具&#xff0c;可以帮助用户轻松捕获、编辑和分享屏幕截图。该工具在Mac上运行&#xff0c;旨在满足用户对于屏幕截图的各种需求。 Snagit 2024支持屏幕录制功能&#xff0c;可以录制摄像头和麦克风等外部设备&#xff0c;让用户录制更加全面的视频…

vue3中toRef创建一个ref对象

为源响应式对象上的某个属性创建一个 ref对象, 二者内部操作的是同一个数据值, 更新时二者是同步的 区别ref: 拷贝了一份新的数据值单独操作, 更新时相互不影响 应用: 当要将 某个prop 的 ref 传递给复合函数时&#xff0c;toRef 很有用 父组件代码: <template><…

“PredictingChildrenHeight“ app Tech Support(URL)

Using our app, we can predict a childs height through formulas. Because there are many factors that affect a childs height, it is for reference only. ​​​​​​​ If you have any questions, you can either leave a message or send the questions to our em…

零基础在ubuntu上搭建rtmp服务器-srs

搭建服务器 搭建 SRS&#xff08;Simple-RTMP-Server&#xff09;服务器需要一些步骤&#xff0c;以下是一个简单的步骤指南。请注意&#xff0c;SRS 的配置可能会有所不同&#xff0c;具体取决于你的需求和环境。在开始之前&#xff0c;请确保你的 Ubuntu 系统已经连接到互联…

Nacos 端口偏移量说明

因为安全原因&#xff0c;在部署nacos-2.2.3版本时&#xff0c;将nacos的application.properties中的server.port端口值由默认值8848改成了server.port8425 问题&#xff1a;nacos 启动时(sh start.sh -m standalone)报错 如下&#xff1a; 经过分析&#xff0c;原因是 9425 …

每日汇评:原油价格正在等待欧佩克对2024年供应削减配额的决定

OPEC会议推迟至周四&#xff0c;个别配额和供应削减仍然是会议的核心议题&#xff1b; 原油价格在欧佩克会议前持平&#xff0c;但是否有意外的看涨取决于欧佩克的减产&#xff1b; 布伦特原油价格在关键的82美元和200均线的交叉点被明显拒绝后走低&#xff1b; 上周三&#xf…

救助儿童会携手联劝公益在世界儿童日举办系列活动

2023年11月17日&#xff0c;为了呼吁家长关注对儿童情绪的关注与表达&#xff0c;救助儿童会携手联劝公益&#xff0c;以“走出情绪迷宫”为主题&#xff0c;于南丰城举办线下公益展&#xff0c;呼吁关注儿童心理健康。 本次展览由情绪迷宫、儿童艺术疗育活动、芝麻街互动三部分…

Docker-compose容器编排

Docker-compose容器编排 是什么 Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;写好多个容器之间的调用关系。然后&#xff0c;只要一个命令&#xff0c;就…

Doris-Routine Load(二十七)

例行导入&#xff08;Routine Load&#xff09;功能为用户提供了一种自动从指定数据源进行数据导入的功能。 适用场景 当前仅支持从 Kafka 系统进行例行导入&#xff0c;使用限制&#xff1a; &#xff08;1&#xff09;支持无认证的 Kafka 访问&#xff0c;以及通过 SSL 方…

解析直播第三方美颜SDK:技术原理与应用

时下&#xff0c;直播平台和主播们纷纷引入美颜技术&#xff0c;以提升视觉效果和用户体验。而在众多美颜技术中&#xff0c;直播第三方美颜SDK成为许多开发者和平台的首选&#xff0c;因其灵活性和高效性而备受推崇。 一、技术原理&#xff1a;美颜算法的精髓 第三方美颜SDK…

02-Java集合之双列集合,如HashMap,Hashtable,Properties,TreeMap的底层结构

双列集合 添加/获取/删除键值对原理 哈希表/散列表是一种将数组和单向链表融合在一起的数据结构 数组在查询方面效率很高,单向链表在随机增删方面效率较高,哈希表将以上的两种数据结构融合在一起后充分发挥它们各自的优点 双列集合以key和value这种键值对方式存储数据: key…

ViLT 论文精读【论文精读】

ViLT 论文精读【论文精读】_哔哩哔哩_bilibili 目录 ViLT 论文精读【论文精读】_哔哩哔哩_bilibili 1 地位 2 ViLT做了什么能让它成为这种里程碑式的工作&#xff1f; 3 ViLT到底把模型简化到了什么程度&#xff1f;到底能加速到什么程度&#xff1f; 2.1 过去的方法是怎…

bop数据合并到COCO

bop数据合并到COCO JSON转TXT重命名txt文件中类别信息的转换 JSON转TXT import json import os,globcategories [{"id": 12,"name": "OREO","supercategory": "icbin"},{"id": 16,"name": "Paper…

Rust语言入门教程(七) - 所有权系统

所有权系统是Rust敢于声称自己为一门内存安全语言的底气来源&#xff0c;也是让Rust成为一门与众不同的语言的所在之处。也正是因为这个特别的所有权系统&#xff0c;才使得编译器能够提前暴露代码中的错误&#xff0c;并给出我们必要且精准的错误提示。 所有权系统的三个规则…

微信小程序生成二维码并保存到本地方法

微信小程序生成二维码请保存到本地方法 官方weapp-qrcode插件 github链接 功能完成样子 wxml <view class"qrcode"><canvas style"width: 275px; height: 275px;" canvas-idmyQrcode></canvas> </view> <view class" …