当前位置: 首页 > news >正文

3.整数运算

系列文章目录

信息的表示和处理 :

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

文章目录

  • 系列文章目录
  • 前言
  • 一、无符号数的加法(Unsigned Addition)
  • 二、无符号数加法逆元
  • 三、补码的加法(Two's Complement Addition)
  • 四、补码的逆元
  • 五、乘法
  • 六、乘以常数(Multiply by Constants)
  • 七、除以2(Dividing by Powers of 2)
  • 总结
  • 参考文献:


前言

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

本篇文章会提到部分整数数据和算数操作的术语,详情可见2.整数表示的前言部分。


一、无符号数的加法(Unsigned Addition)

先来看一个例子:

unsigned char a = 255;
unsigned char b = 1;unsigned cahr c = a + b;
printf("c = %d", c)

运行结果: c = 0
在这里插入图片描述
下面是这样一个无符号数加法的总结性结论:
在这里插入图片描述

考虑溢出,C 语言不会将溢出作为错误发出信号
当 x+y >= 2^w, 实际结果为 s = x+y-2^w
对任意的 x+y,s = (x+y) % 2^w

在这里插入图片描述
上述代码是判断是否溢出,证明略

二、无符号数加法逆元

根据逆元的定义好理解,但是从常识来讲不好理解
在这里插入图片描述在这里插入图片描述

三、补码的加法(Two’s Complement Addition)

在这里插入图片描述

正溢出:

char x = 127;
char y = 1;char z = a + b;
printf("z=%d", z);

运行结果:z = -128

解释:
在这里插入图片描述
负溢出:
在这里插入图片描述
如何判断溢出:
在这里插入图片描述

四、补码的逆元

这个知识点是没啥用又不太好理解的知识点,略过

五、乘法

正常的乘法:
在这里插入图片描述
无符号数的乘法:
在这里插入图片描述
补码的乘法:
在这里插入图片描述
举一个3-bit的乘法:

在这里插入图片描述可以看到,当相同的二进制位(binary)它们分别用不同的表示方式(无符号数,补码)相乘,在位层面上是一样的吗?
证明:
在这里插入图片描述在这里插入图片描述

六、乘以常数(Multiply by Constants)

在这里插入图片描述

相当于10进制里面移动小数点

为什么会这样???
在这里插入图片描述
举一个例子:
在这里插入图片描述

七、除以2(Dividing by Powers of 2)

在这里插入图片描述
在这里插入图片描述注意:补码和无符号数的右移
在这里插入图片描述证明略

这里有个特殊点:
在这里插入图片描述
这里我们期望得到的是-771而不是-772(直接向右算数移动四位)。

首先,我们为什么这么期望?因为有如下规则(向0舍弃):
在这里插入图片描述为了满足这种规则,如果x小于0,移位之前要加上一个bias
在这里插入图片描述这个bias的值是( 1 << k ) - 1
在这里插入图片描述


总结

  1. 无符号数加法可能会导致溢出
  2. 无符号数的加法逆元和补码逆元(鸡肋)
  3. 补码的加法:
    • 正溢出
    • 负溢出
  4. 无符号数的乘法,和补码的乘法
  5. 乘以常数,可以用左移。甚至可以拆分常数将其弄成2^k的组合形式
  6. 除以2^k
    • 正数就逻辑右移
    • 负数加上bias再算数右移(bias的作用就是使得结果向0舍入)
  7. 上面的乘以和除以2^k就可以用小数点移位去理解,就相当于是10进制中的乘和除以10^k

参考文献:

  1. 《深入理解计算机系统 3th 中文版》
  2. b站up主九曲阑干

相关文章:

3.整数运算

系列文章目录 信息的表示和处理 : Information Storage&#xff08;信息存储&#xff09;Integer Representation&#xff08;整数表示&#xff09;Integer Arithmetic&#xff08;整数运算&#xff09;Floating Point&#xff08;浮点数&#xff09; 文章目录 系列文章目录前…...

uri.getQueryParameters(name)返回一个列表(List)

uri.getQueryParameters(name)返回一个列表&#xff08;List&#xff09;而不是单个值的原因在于URI&#xff08;统一资源标识符&#xff09;中查询参数&#xff08;query parameters&#xff09;的设计允许同一个名称&#xff08;name&#xff09;对应多个值。这意味着一个查询…...

鸿蒙ArkUI开发:常用布局【主轴】

ArkUI中常用布局容器 线性布局&#xff08;Row/Column&#xff09; 线性布局的子元素在线性方向上&#xff08;水平方向和垂直方向&#xff09;依次排列线性布局容器包括[Row]和[Column]。Column容器内子元素按照垂直方向排列&#xff0c;Row容器内子元素按照水平方向排列开发…...

Spring Security 入门 2

1.项目实战 就以RuoYi-Vue 为例吧&#xff0c;主要以下几点原因&#xff1a; 基于 Spring Security 实现。 基于 RBAC 权限模型&#xff0c;并且支持动态的权限配置。 基于 Redis 服务&#xff0c;实现登录用户的信息缓存。 前后端分离。同时前端采用 Vue &#xff0c;相对来…...

C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现

标准库中的string&#xff1a;C初阶学习第六弹——string&#xff08;1&#xff09;——标准库中的string类-CSDN博客 前言&#xff1a; 在前面我们已经学习了如何使用标准库中的string类&#xff0c;但作为一个合格的程序员&#xff0c;我们不仅要会用&#xff0c;还要知道如…...

5.nginx常用命令和日志定时切割

一. nginx常用的相关命令介绍 1.强制关闭nginx: ./nginx -s stop 2.优雅的关闭nginx: ./nginx -s quit 3.检查配置文件是否正确&#xff1a; ./nginx -t 4.查看nginx版本&#xff1a; ./nginx -v 5.查看nginx版本相关的配置环境信息&#xff1a;./nginx -V 6.nginx帮助信…...

Redis-详解(基础)

文章目录 什么是Redis&#xff1f;用Redis的特点&#xff1f;用Redis可以实现哪些功能&#xff1f;Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis&#xff1f; Redis&#xff08;Remote DictionaryServer&#xff09;是一个开源…...

记录minio的bug(Object name contains unsupported characters.)

场景是我将后端服务从121.xxx.xxx.xxx服务器上转移到了另一台服务器10.xxx.xxx.xxx 但图片都还在121.xxx.xxx.xxx服务器上&#xff0c;同样我10.xxx.xxx.xxx也安装了minio并且我的后端服务配置的minio地址也是10.xxx.xxx.xxx 此时有一个业务通过minio客户端获取图片&#xf…...

【嵌入式开发 Linux 常用命令系列 7.6 -- sed 替换指定字符串】

请阅读【嵌入式开发学习必备专栏】 文章目录 sed 替换指定字符串 sed 替换指定字符串 背景&#xff1a; 找到当前目录下所有的.h 和 .c 文件 将他们中的字符 print_log替换为 demo_log 可以使用find命令结合sed命令在Linux环境下完成这项任务。下面是一个命令行示例&#xff…...

C++语言的字符数组

存放字符数据的数组是字符数组&#xff0c;字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。 1. 声明一个字符数组 char c[5]; 2. 字符数组赋值方式 &#xff08;1&#xff09;为数组元素逐一赋值 c[0]H c[1]E c[2]L c[3]L c[4]O &#xff08;2&…...

24届电信红队实习生面经

sql注入的一些&#xff1a;原理、打的靶场的常见绕过、问了一些函数 (load_file、 outfile这些&#xff09;、后利用 (mysql的udf提权的原理、条件、利用、其他像mssql这些数据库的提权手段、这些就没细问了&#xff0c; 就问有哪些方式&#xff1b; 问了有没有实战遇到mysql的…...

linux下使用jexus部署aspnet站点

1.运行环境 Centos 7 安装dos2unix工具 yum install dos2unix 安装jexus curl https://jexus.org/release/x64/install.sh|sudo sh2.网站部署 2.1. 将windows下的网站发布包Msc_qingdao_admin.zip上传到linux中&#xff0c; 然后解压后放入/var/www(没有则创建)目录下 r…...

代码随想录训练营Day 27|理论基础、力扣 77. 组合

1.理论基础 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 来自代码随想录的网站&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}for (…...

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手&#xff1f;Spring框架的核心容器是你不可或缺的伙伴&#xff01; 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…...

Python 正则表达式(一)

文章目录 概念正则函数match函数正则表达式修饰符意义&#xff1a; 常用匹配符限定符原生字符串边界字符 概念 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个…...

Cocos Creator 3.8.x报错:5302

在小游戏加载某个bundle后&#xff0c;如果报以下错误&#xff1a; 5302&#xff1a;Can not find class %s 说明bundle中某个预制件*.prefab引用了未加载的bundle的资源。 解决方法有两个&#xff1a; 1、将引用的资源移到预制件*.prefab相同的bundle下&#xff1b; 2、将…...

网页如何集成各社区征文活动

Helllo , 我是小恒 由于我需要腾讯云社区&#xff0c;稀土掘金以及CSDN的征文活动RSS&#xff0c;找了一下没发现&#xff0c;所以使用GET 请求接口对网页定时进行拉取清洗&#xff0c;甚至无意间做了一个简单的json格式API 最终网址:hub.liheng.work API:http://hub.liheng.wo…...

【知识碎片】2024_05_13

本文记录了两道代码题【自除数】和【除自身以外数组的乘积】&#xff08;利用了前缀积和后缀积&#xff0c;值得再看&#xff09;&#xff0c;第二部分记录了关于指针数组和逗号表达式的两道选择题。 每日代码 自除数 . - 力扣&#xff08;LeetCode&#xff09; /*** Note: T…...

Day53代码随想录动态规划part13:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

Day52 动态规划part13 300.最长递增子序列 leetcode链接&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 题意&#xff1a;给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列&#xff0c;删除&a…...

自己动手为wordpress注册一个Carousel轮播区块

要为WordPress注册一个Carousel轮播区块&#xff0c;你可以创建一个自定义Gutenberg块。以下是一个简单的示例&#xff0c;说明如何创建一个Carousel轮播区块&#xff1a; 1. 在你的主题目录中创建一个名为carousel-block的子文件夹。在这个文件夹中&#xff0c;创建一个名为c…...

前端拖拽交互实现:别再只会用原生拖拽了

前端拖拽交互实现&#xff1a;别再只会用原生拖拽了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行&#xff0c;咱们今天聊聊前端拖拽交互。别告诉我你还在用原生的HTML5拖拽API&#xff0c;那感觉就像在用诺基亚手机——能打电话&#xff0c;但体验太差。 为什…...

基于MATLAB的数字图像处理系统:预处理、特征提取与语义分割全流程实现

数字图像处理系统&#xff08;基于matlab&#xff09; 此系统包括预处理&#xff0c;特征提取&#xff0c;语义分割 使用机器学习算法knn和svm 预处理包括线性灰度级变化&#xff0c;指数灰度级变化&#xff0c;直方图均衡化&#xff0c;高斯滤波&#xff0c;中值滤波&#xff…...

Play Integrity Fix:高效解决Android设备认证问题的实战指南

Play Integrity Fix&#xff1a;高效解决Android设备认证问题的实战指南 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 问题引入&#xff1a;Android设备认证的…...

【AI+教育】AI总犯“金鱼记忆”?揭秘大模型长期记忆架构,让它真正记住你!

在和AI对话时,你是否有过这样的抓狂时刻:前脚刚告诉它“我叫小明,我不吃香蕉”,五分钟后它又热情地向你推荐香蕉饼? 目前的多数大语言模型就像拥有“金鱼记忆”,一刷新就忘得一干二净。为了让智能体(Agent)能像真正的老朋友一样懂你,我们设计了一套长期记忆功能模块。…...

LeifHomieLib:ESP32/8266轻量级Homie v3 MQTT设备库

1. LeifHomieLib 项目概述LeifHomieLib 是一个专为 ESP8266 和 ESP32 平台设计的轻量级 Homie v3 协议实现库&#xff0c;其核心目标是为资源受限的物联网边缘节点提供符合 Homie 规范的 MQTT 设备抽象能力。该库并非 Homie v3 标准的全功能实现&#xff0c;而是聚焦于与 openH…...

Charticulator:突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作

Charticulator&#xff1a;突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 数据可视化工具是否常常…...

OpCore Simplify:零基础黑苹果配置的智能助手

OpCore Simplify&#xff1a;零基础黑苹果配置的智能助手 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 对于许多电脑爱好者来说&#xff0c;安装黑苹…...

当地的美国展会搭建制作公司口碑排行

随着中国企业出海参展日益频繁&#xff0c;选择一家可靠的美国本土搭建商成为关键决策。许多企业主发现&#xff0c;直接对接海外供应商时&#xff0c;常面临沟通不畅、报价模糊、落地效果与设计图相差甚远等问题。这背后&#xff0c;是原有依赖单一信息渠道或熟人推荐的模式正…...

告别手推雅可比!用Ceres自动求导搞定SLAM中的BA优化(附完整代码)

告别手推雅可比&#xff01;用Ceres自动求导搞定SLAM中的BA优化&#xff08;附完整代码&#xff09; 在视觉SLAM系统的开发中&#xff0c;Bundle Adjustment&#xff08;BA&#xff09;优化是提升定位与建图精度的关键环节。传统实现需要手动推导复杂的雅可比矩阵&#xff0c;不…...

PyCharm项目环境混乱?试试用Mamba+environment.yml打造可复现的纯净工作流

PyCharm项目环境混乱&#xff1f;试试用Mambaenvironment.yml打造可复现的纯净工作流 当团队协作开发Python项目时&#xff0c;最令人头疼的问题莫过于"在我机器上能跑"的经典困境。不同成员使用不同版本的依赖包&#xff0c;或者本地环境被多个项目污染&#xff0c;…...