杂货边角(1):计算机中有符号数和浮点数表示和运算

2023-10-12 22:32

本文主要是介绍杂货边角(1):计算机中有符号数和浮点数表示和运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 整数的有符号表示方式

计算机中目前常用的整数类型分为 int_32int_64,以32位为例。计算机中都以补码形式存放有符号数。

正整数的补码表示和正整数的无符号类型一致,符号位为0;
负整数的补码表示则需要依次经过求反码,求补码,举例如下

对于-4而言,则符号位为1, 4的二进制表示为 000 0000 0000 0100
求反码:                             111 1111 1111 1011
求补码(反码-1):                     111 1111 1111 1010
则最终-4在计算机中补码形式为:          1111 1111  1111 1010 (0xFFFA)

很多程序语言并没有无符号数,在实际编程中很少用到有符号数,C语言是支持无符号数的,但是不恰当的使用无符号数会导致一些很危险的操作,当一个有符号数和一个无符号数运算时,有符号数会被转换成无符号数的形式(隐式转换)。所以除非在特别确定的场景下(如计数器),否则尽量不要为了省点空间而采用unsigned这种炫技前缀。

2. 浮点数的有符号表示方式

相信很多关于浮点数的网上资料都是IEEE 754的拷贝,把本来很简单的东西说的很复杂,其实就是一张图的问题
这里写图片描述
再额外举一个例子,两相对比,将会对浮点数的精度不定和截断误差有更深的理解。

浮点数:4.025675
整数部分40010 ; 小数部分:.0000 0110 1001 0010 1010 01  
第一次整合:10. 0000 0110 1001 0010 1010 01 可以发现小数点要向左移动1位才能到符号位1之后
则E = 127 + 1 = 128,即E1000 0000
符号位为0,代表正数
最终表示为:0 1000 0000 .0000 0011 0100 1001 0101 001
即对应十六进制0x4001A4A9

从上面可以看到浮点数由于存在着移位偏移的原因,故而导致浮点数的最小精度是不定的,这也浮点数存在截断误差的原因所在。可以看到浮点数的存储格式和整数的存储格式不同,这也是为何整数和浮点数做运算必须先将整数转换为浮点数,而整数转换为浮点数很简单,因为整数是浮点数的一个特例,即小数部分为0。

2. 有符号整数的运算方式

加法
有符号整数的加法其实很简单,即两个有符号整数的补码相加(符号位也是要正常进位),然后计算结果作为正常有符号整数进行解析,举两个例子

-3 + -2
出于简单起见,数据内容设置为4位,符号位设置在第5位,则-3: 1 1101; -2: 1 1110
1 1101 + 1 1110 = 11 1011截断为1 1011,解析为-5 
-4 + 8
出于简单起见,数据内容设置为4位,符号位设置在第5位,则8: 0 1000; -4: 1 1100
则0 1000 + 1 1100 = 10 0100截断为0 0100即为4

减法
从上面 -4+8可以看到,先将减数转换为补元,然后再和被减数相加即可。即可将有符号整数的减法转换为加法。

8 - 4
出于简单起见,数据内容设置为4位,符号位设置在第5位,则4的补元为2^4-4 = 12即1100,同时符号位取反,即为1
则得到4的补元为:1 1100,其实即为-4,这样便可以转换成下面的加法-4 + 8
出于简单起见,数据内容设置为4位,符号位设置在第5位,则8: 0 1000; -4: 1 1100
则0 1000 + 1 1100 = 10 0100截断为0 0100即为4

乘法
其实乘除运算归根结底还是移位运算+加法运算的结合,其实原理和我们10进制乘法移位叠加并无本质区别。有符号整数的乘法一般是借助硬件加法器完成的,有补码一位乘法、两位乘法和三位乘法,位数越多,则计算速度越快,但对辅助的寄存器要求也越高。乘法的器的设计也是满精巧的,不过一般而言并无太多必要去了解。

这篇关于杂货边角(1):计算机中有符号数和浮点数表示和运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198890

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.