2.整数表示

news2024/9/21 20:36:34

系列文章目录

信息的表示和处理 :

  1. Information Storage(信息存储)
  2. Integer Representation(整数表示)
  3. Integer Arithmetic(整数运算)
  4. Floating Point(浮点数)

文章目录

  • 系列文章目录
  • 前言
  • 一、整数数据类型
  • 二、无符号数的编码(Unsigned Encodings)
  • 三、补码编码(Two's Complement Encodings)
  • 四、有符号数和无符号数之间的转换(Conversions between Signed and Unsigned)
    • 4.1有符号数 <-> 无符号数
  • 五、扩展一个数字的位表示(Expanding the Bit Representation of a Number)
    • 5.1 无符号数扩展
    • 5.2 有符号数的扩展
  • 六、截断数字(Truncating unsigned number)
    • 6.1 截断无符号数
    • 6.2 截断无符号数
  • 总结
  • 参考文献


前言

本文参考书籍是《深入理解计算机系统 3th 中文版》,本文的图片大多是参考和来自于b站up主九曲阑干。非常感谢大佬,侵权删。

下列图列出了引入的数学术语,用于精确定义和描述计算机如何编码和操作整数,这里列出作为参考
在这里插入图片描述

  • 无符号表示与补码表示
  • 有符号数到无符号数的转换会产生漏洞,避免错误的方法之一是绝不使用无符号数。
  • 除了 C 以外很少有语言支持无符号整数,Java 就只支持有符号数

一、整数数据类型

在这里插入图片描述可以看到上述表中只有long类型的取值范围和机器相关。


二、无符号数的编码(Unsigned Encodings)

**原理:**无符号数编码的定义:(Binary to Unsigned)
在这里插入图片描述

  • 把数字看做向量,这个想法还挺好的。但是我认为它不符合向量的运算(如果要取进位的话),所以在不考虑进位的情况下,可以当作向量。
  • 这里将每个位上的x看做一个权重,由于是2进制所以该权重是能取0或者1

三、补码编码(Two’s Complement Encodings)

用补码编码的形式来表示有符号数 8分42

  • 最高位是一个负权重的概念 ,最高位是符号位这一概念不是定义,而是一个推论。 补码的定义实际就是将符号位解释为负权。
    在这里插入图片描述
    B 2 T 4 ( [ 0101 ] ) = − 0 ⋅ 2 3 + 1 ⋅ 2 3 + 0 ⋅ 2 1 + 1 ⋅ 2 0 = 5 B 2 T 4 ( [ 1011 ] ) = − 1 ⋅ 2 3 + 0 ⋅ 2 3 + 1 ⋅ 2 1 + 1 ⋅ 2 0 = − 5 B2T_4([0101]) = -0 \cdot 2^3 + 1 \cdot 2^3 + 0 \cdot 2^1 + 1 \cdot 2^0 = 5 \\ B2T_4([1011]) = -1 \cdot 2^3 + 0 \cdot 2^3 + 1 \cdot 2^1 + 1 \cdot 2^0 = -5 B2T4([0101])=023+123+021+120=5B2T4([1011])=123+023+121+120=5
    下面这幅图很好能表示权重这一概念在进制里面的应用:
    在这里插入图片描述
    special numerical:
    有符号数的-1 和无符号数的最大值,它们俩的二进制编码是一样的!!!

在这里插入图片描述
有符号数和无符号数由于它们对最高位的解释不同,导致了二者结果不同。

四、有符号数和无符号数之间的转换(Conversions between Signed and Unsigned)

** 在有符号数与无符号数之间进行强制类型转换的结果是保持位值不变,只改变解释位的方式。 **

// conversion between signed and unsigned
short int a = -12345;
usigned short b = (unsigned short) a;
printf("a = %d, b = %u", a, b);

运行结果:

a = -12345, b = 53191
强制转换并没有改变其二进制位,变得是二进制解释的方式变化了

4.1有符号数 <-> 无符号数

在这里插入图片描述在这里插入图片描述为什么要去了解二者之间的转换,来看下面这个例子

int a = -1;
unsigned int b = 0;
if(a < b)
	printf("-1 < 0");
else 
	printf("-1 > 0");

运行结果是

-1 > 0

这是因为C语言在比较两个不同类型的数据的时候,C语言隐式地将有符号数转成了无符号数。


五、扩展一个数字的位表示(Expanding the Bit Representation of a Number)

5.1 无符号数扩展

扩展无符号数使用零扩展,即在最高位前加 0
在这里插入图片描述

5.2 有符号数的扩展

扩展有符号数使用符号扩展,即在最高位前加最高有效位的值
在这里插入图片描述

为什么要这么做?接下来证明一下扩展前和扩展后是相等的(编译器解释,展示)。用一个不太严谨的数学归纳法:
在这里插入图片描述简单证明一下扩展1位是相等的:
在这里插入图片描述
接下来就是以此类推下去,得证:符号扩展后二进制转化为有符号数,其数值不变


六、截断数字(Truncating unsigned number)

位数多转向位数少的转换,肯定涉及到要舍取位数多余的部分。计算机要采取这样的操作就是取模!

6.1 截断无符号数

在这里插入图片描述如果看不懂,来看看10进制
在这里插入图片描述

6.2 截断无符号数

在这里插入图片描述


总结

第一节是简单介绍整型数据有哪些类型
第二节是无符号数的编码,主要是权重这样的一个概念
第三节是补码的最高位是负权重的概念
第四节是位数相同的一个转换
第五节是位数少向位数多扩展
第六节是位数多转向位数少的转换

参考文献

  1. 《深入理解计算机系统 3th 中文版》
  2. b站up主九曲阑干
  3. 《深入理解计算机系统(CSAPP)》全书学习笔记(详细) 这一章直接的链接是2 信号表示和处理

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计不是CRUD(18):像搭积木一样搭建应用系统(上)——单个应用系统的搭建过程

1、概述 之前的文章本专题花了大量文字篇幅,介绍如何基于业务抽象的设计方式完成应用系统各个功能模块的设计工作。而之所以进行这样的功能模块设计无非是希望这些功能模块在具体的项目实施过程中,能够按照当时的需求快速的、简易的、稳定的、最大可能节约开发成本的形成可用…

腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧

当今时代数字化经济蓬勃发展人们的生活逐渐便利&#xff0c;类似线上购物、线上娱乐、线上会议等数字化的服务如雨后春笋般在全国遍地生长&#xff0c;在人们享受这些服务的同时也面临着各式各样的挑战&#xff0c;如网络数据会不稳定、个人隐私容易暴露、资产信息会被攻击等。…

RabbitMQ消息模型之Direct消息模型

Direct消息模型 * 路由模型&#xff1a; * 一个交换机可以绑定多个队列 * 生产者给交换机发送消息时&#xff0c;需要指定消息的路由键 * 消费者绑定队列到交换机时&#xff0c;需要指定所需要消费的信息的路由键 * 交换机会根据消息的路由键将消息转发到对应的队…

C++vector类(个人笔记)

vector类 1.熟悉vector接口以及使用1.1vector的定义1.2vector迭代器使用1.3vector空间增长1.4vector增删查改1.5vector迭代器失效问题&#xff08;重点&#xff09; 2.vector的一些笔试题3.模拟实现vector 1.熟悉vector接口以及使用 vector的C官网文档 1.1vector的定义 (con…

基于Python的卷积网络的车牌识别系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

深入剖析Tomcat(二) 实现一个简单的Servlet容器

现在开始《深入剖析Tomcat》第二章的内容&#xff0c;第一章中&#xff0c;我们编码实现了一个能正常接收HTTP请求并返回静态资源的Web容器&#xff0c;这一章开始引入Servlet的概念&#xff0c;使我们的服务能根据请求动态返回内容。 Servlet是什么&#xff1f; 这是首先要弄…

FFmpeg: 自实现ijkplayer播放器--04消息队列设计

文章目录 播放器状态转换图播放器状态对应的消息&#xff1a; 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列&#xff0c;用于发送&#xff0c;设置播放…

docker-compose yaml指定具体容器网桥ip网段subnet;docker创建即指定subnet;docker取消自启动

1、docker-compose yaml指定具体容器网桥ip网段subnet docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网&#xff0c;这时候可以更改yaml指定subnet 宿主机内网一般是192**&#xff0c;这时候容器可以指定172* version: 3.9 services:coredns:…

内网渗透-域环境的搭建

域环境的搭建 文章目录 域环境的搭建前言一、什么是域环境 什么是域内网基础知识点 二、域环境的搭建 1. 部署域结构2.如何加入域3.SRV出错及解决办法4.SRV记录注册不成功的可能原因 禁用域中的账户将计算机退出域添加域用户总结 前言 一、什么是域环境 什么是域 域是一种管…

盘点2024年最新可用免费云服务器

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始使用云服务器来满足各种业务需求。云服务器作为云计算的核心服务之一&#xff0c;以其弹性扩展、按需付费等特点受到广泛关注。本文将为大家盘点2024年最新可用免费云服务器&#xff0c;助力大家轻松上云&#xf…

浏览器工作原理与实践--CSRF攻击:陌生链接不要随便点

在上一篇文章中我们讲到了XSS攻击&#xff0c;XSS 的攻击方式是黑客往用户的页面中注入恶意脚本&#xff0c;然后再通过恶意脚本将用户页面的数据上传到黑客的服务器上&#xff0c;最后黑客再利用这些数据进行一些恶意操作。XSS攻击能够带来很大的破坏性&#xff0c;不过另外一…

量子飞跃:从根本上改变复杂问题的解决方式

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 利用多功能量子比特的量子计算机已处于解决复杂优化问题的最前沿&#xff0c;例如旅行商问题&#xff0c;这是一个典型的…

Python实现时间序列ARIMA模型(附带超详细理论知识和完整代码实现)

文章目录 0 结果1 介绍2 建模2.1 预备知识2.1.1 ADF检验结果&#xff08;单位根检验统计量&#xff09;2.1.2 差分序列的白噪声检验&#xff08;这里使用Ljung-Box检验&#xff09;2.1.3 ARIMA模型&#xff08;差分整合移动平均自回归模型&#xff09;的三个参数:p&#xff0c;…

探索分布式技术--------------注册中心zookeeper

目录 一、ZooKeeper是什么 二、ZooKeeper的工作机制 三、ZooKeeper特点 四、ZooKeeper数据结构 五、ZooKeeper应用场景 5.1统一命名服务 5.2统一配置管理 5.3统一集群管理 5.4服务器动态上下线 5.5软负载均衡 六、ZooKeeper的选举机制 6.1第一次启动选举机制 6.2非…

家居网购项目(Ajax验证用户名+上传图片)

文章目录 1.Ajax验证用户名1.程序框架图2.修改MemberServlet3.修改login.jsp4.结果展示 2.Ajax判断验证码是否输入正确1.修改MemberServlet2.修改login.jsp3.结果展示 3.Ajax添加购物车1.程序框架图2.修改CartServlet2.修改index.jsp3.解决问题—未登录直接添加购物车&#xff…

Excel文件解析

在此模块的学习中&#xff0c;我们需要一个新的开源类库---Apahche POI开源类库。这个类库的用途是&#xff1a;解析并生成Excel文件(Word、ppt)。Apahche POI基于DOM方式进行解析&#xff0c;将文件直接加载到内存&#xff0c;所以速度比较快&#xff0c;适合Excel文件数据量不…

没有算法大佬,都是草台班子

没有算法大佬&#xff0c;都是草台班子。 最近除了工作之外&#xff0c;还有一些时间在和加我微信的小伙伴沟通&#xff0c;聊的内容大部分集中在如何快速有效的学习人工智能、入门人工智能的技巧。 其中&#xff0c;一个知乎过来加我微信的小伙伴的经历更是让我感触很深。 …

eclipse导入maven项目与配置使用本地仓库

前言 本人润国外了&#xff0c;发现不能用收费软件IDEA了&#xff0c;需要使用eclipse&#xff0c;这个免费。 但是早忘了怎么用了&#xff0c;在此总结下。 一、eclipse导入本地项目 1.选这个&#xff1a;open projects from file system… 2.找到项目文件夹&#xff0c;…

树莓派点亮双色LED

双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…

《QT实用小工具·二十六》运行时间记录

1、概述 源码放在文章末尾 运行时间记录&#xff0c;包含如下功能&#xff1a; 可以启动和停止服务&#xff0c;在需要的时候启动。 可以指定日志文件存放目录。 可以指定时间日志输出间隔。 可以单独追加一条记录到日志文件。 日志为文本格式&#xff0c;清晰明了。 软…