整数乘法运算

2023-11-07

在高级语言中,两个n位整数相乘得到的结果通常也是一个n位整数,即结果只取2n位乘积中的低n位。这导致乘法运算得到结果必须在范围: -2n-1<= x*y < 2n-1才不会溢出。


假设为4位,进行52

			0101
		*   0101
		--------
		    0101
		+ 0101
		--------         只取4位,即10011111的补码 即为-7
		00011001
			----

在二进制乘法运算下,只有1*1等于1;
再列如:32

		0011
	*	0011
	--------
	    0011
	+  0011        1001同样为1001 也为-7的补码
	--------
	00001001   
		----

运算溢出会给程序带来意想不到的结果

int mult(int x,int y){
	int z=x*y;
	if(!x||z/x==y) return z;
	//这样的设计能避免溢出得到错误的数据
}

注意:
1、当x、y、z都是unsigned int时,只需要根据乘积的高n位是否为全0,进行判断溢出,全为0,则不溢出。

这与unsigned的特性有关,因为它无负数,故最高位的符号位也充当存储数值的功能。如果是一个n位的乘法,它的取值范围只能:0~2n-1之间,然而进行n位的乘法会得到一个2n位的数据,而乘法的结果只保留低n位,故在不溢出的情况下,高n位只能全为0.

2、若高n位全为0或全为1且等于低n位的最高位,则不溢出。
在这里插入图片描述


在MIPS处理器中,mult会将两个32位带符号整数相乘,得到的64位乘积置于两个32位内部寄存器Hi和Lo中,因此,可以根据Hi寄存器中的每一个位值是否等于Lo中的最高位进行溢出判断。

注:乘法指令不产生溢出标志


整数乘法溢出漏洞


int copy_array(int* array,int count){
	int *myarray=(int*)malloc(count*sizeof(int));
	if(myarray==NULL){
		return -1;
	}
	for(int i=0;i<count;i++)
		myarray[i]=array[i];
	return count;
}

当参数count很大时,则count*sizeof(int)会溢出。
malloc会在堆一段能容纳需要大小的连续空间分配,在进行越出访问时,可能会破坏堆(heap)中的大量数据。


整数乘法运算比较移位和加法等运算所用时间长,,因此,编译器在处理变量与常数相乘时,往往以移位、加法和减法的组合运算来代替乘法运算。

例如:对于表达式x20,编译器可以利用 20=16+4=24+22,将x20转换为(x<<4)+(x<<2),这样,一次乘法转换两次移位和一次加法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数乘法运算 的相关文章

  • Boom!!!计算机系统,从理解到爆炸,Bomblab

    进入目录下 bomb 开始运行炸弹 对于炸弹command not found之类的鬼畜情况 xff1a chmod 777 bomb 然后再运行炸弹 objdump d bomb gt bomb s 把整个代码打到文件里去 xff0c 也
  • 【计算机系统】CPU是如何运行程序的

    一 CPU组成部分 寄存器 xff1a 存储CPU执行的指令的数据 xff0c CPU每次执行指令都会重新更新寄存器 程序计数器 PC xff1a 记录CPU即将执行的指令内存中的地址 逻辑控制单元 ALU xff1a CPU中负责逻辑计算
  • 多核编程与单核多线程编程

    并发 时间段内有很多的线程或进程在执行 但何时间点上都只有一个在执行 多个线程或进程争抢时间片轮流执行 并行 时间段和时间点上都有多个线程或进程在执行 单核cpu的话只能是并发 多核cpu才能做到并行执行 那有人可能有这样的疑问 那多进程的
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 【linux】内核组件 [不断补充中...]

    防火墙 netfilter iptables IP 信息包过滤系统 netfilter 内核空间 kernelspace 是内核的一部分 由一些信息包过滤表组成 这些表包含内核用来控制信息包过滤处理的规则集 即 存放内核过滤规则的防火墙 i
  • I/O控制方式——通道控制方式

    一 定义 通道是一个独立于 CPU的专管输入 输出控制的处理机 它控制设备与内存直接进行数据交换 它有自己的通道指令 这些通道指令受CPU启动 并在操作结束时向CPU发中断信号 二 原理 2 1 通道控制方式的引入 通道控制方式与DMA控制
  • 哈工大2018秋高级语言程序设计课程大作业

    Github文件下载地址哈工大2018秋高级语言程序设计课程 高级语言程序设计 实验大作业反思报告 实验大作业题目 智能趣味电子通讯录 类型 信息管理系统 学生姓名 郭茁宁 班 号 1837101 学 号 1183710109 所在院系 计
  • 计算机系统 实验四(课程实验LAB四)

    实验中需要的几个控制语句 u userid 使用这个语句是要确保不同的人使用不同的 ID 做题 并攻击不同的地址 h 用于打印这几个操作的内容 n 用于 Level4 关卡 s 用于提交你的解决方案到服务器中 1 根据makecookie生
  • 整数乘法运算

    在高级语言中 两个n位整数相乘得到的结果通常也是一个n位整数 即结果只取2n位乘积中的低n位 这导致乘法运算得到结果必须在范围 2n 1 lt x y lt 2n 1才不会溢出 假设为4位 进行52 0101 0101 0101 0101
  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • 【定点数运算】定点的乘法和加法

    目录 定点的介绍 定点的优势 定点数的乘法和加法 乘法 加法 定点的介绍 在之前的博客中介绍了定点数和浮点数 想要了解的可以前往以下链接 定点和浮点 定点数与浮点数的解释 定点的优势 使用定点表示有什么优势 为什么不简单地将所有值规范化为整
  • L1,L2,L3 Cache缓存原理

    一 介绍 CPU缓存 Cache Memory 也被称为Cache 是存储器子系统的组成部分 存放着程序经常使用的指令和数据 从广义的角度上看 Cache是快设备为了缓解访问慢设备延时的预留的Buffer 从而可以在掩盖访问延时的同时 尽可
  • 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 操作系统CPU调度

    概述 多道程序操作系统的基础 通过在进程之间切换CPU 操作系统可以提高计算机的吞吐率 对于单处理器系统 每次只允许一个进程运行 任何其他进程必须等待 直到CPU空闲能被调度为止 CPU按一定的调度算法从就绪队列中选择一个进程 把CPU的使
  • 保护模式的分段

    一 分段的背景 在8086处理器诞生之前 内存寻址方式就是直接访问物理地址 8086处理器为了寻址1M的内存空间 把地址总线扩展到了20位 但是 一个尴尬的问题出现了 ALU的宽度只有16位 也就是说 ALU不能计算20位的地址 为了解决这
  • 【科普】CRC校验(一)什么是CRC校验?

    目录 CRC 循环冗余校验 CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC 循环冗余校验 CRC Cyclic Redundancy Check 循环冗余检验 是一种用于检测数字数据错误的技术 作
  • 计算机的保护模式与实模式

    一 背景 80386开始 CPU有三种工作方式 实模式 保护模式和虚拟8086模式 只有在刚刚启动的时候是real mode 等到操作系统运行起来以后就切换到protected mode 实模式只能访问地址在1M以下的内存称为常规内存 我们
  • 数据密集型应用系统设计(2)

    文章目录 数据模型与查询语言 NoSQL 数据库历史 关系数据库与文档数据库现状 数据查询语言 图状数据模型 小结 数据模型与查询语言 大多数应用程序是通过一层层叠加数据模型来构建的 例如 应用程序开发人员观测现实世界 通过对象或者数据结构

随机推荐

  • vue中使用Ueditor编辑器

    vue中使用Ueditor编辑器 一 下载包 从Ueditor的官网下载1 4 3 3jsp版本的Ueditor编辑器 官网地址为 https github com fex team ueditor 下载解压后会得到如果下文件目录 将上述U
  • 【满分】【华为OD机试真题2023 JAVA&JS】查找树中元素

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 查找树中元素 知识点树BFS搜索广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 已知树形结构的所有节点信息 现要求根据输入坐标 x y 找到该节点保存的内容
  • 全国紧跟数字中国步伐,用数字技术守护生命,共同见证国家治理现代化转型

    为了每个人都迈向美好的生活 为了国家治理的现代化 我国正紧锣密鼓地在数字经济 数字社会 和数字政府三大维度推进千行百业的信息化进程 这一行动也旨在落实我国 数字中国2025 的宏伟规划 数字中国 的核心包括数字化 网络化和标准化 它不仅仅体
  • 计算机内存调用优化,内存数据库的使用方法与优化方案分析

    数据存储都是保存在硬盘中的 而内存只是一个数据暂时存储和调用的缓冲地带 今天我们就一起来了解一下 关于内存缓存数据存储都有哪些问题需要了解 Redis是一种内存数据库 将数据保存在内存中 读写效率要比传统的将数据保存在磁盘上的数据库要快很多
  • 分治算法——求逆序对数

    分治求逆序对数 问题描述 在Internet上的搜索引擎经常需要对信息进行比较 比如可以通过某个人对一些事物的排名来估计他对各种不同信息的兴趣 从而实现个性化服务 对于不同的排名结果可以用逆序来评价他们之间的差异 考虑1 2 n的排列i1
  • 【目标检测】42、目标检测回顾

    文章目录 Abstract 1 Introduction 2 Problem Setting 3 Detection Components 3 1 Detection Settings 3 2 Detection Paradigms 3 2
  • JS 中 replace 和 replaceAll 的区别?

    方法解释 两种方法都返回一个新字符串 原始字符串保持不变 并且改方法可以传两个参数 参数一 pattern pattern 可以是一个 字符串 或一个 正则表达式 参数二 replacement replacement 可以是一个字符串或一
  • c语言const字符串,C语言之正确使用const

    一 const用途 const是一个C语言的关键字 它限定一个变量不允许被改变 1 const与基本类型 const char m 限定m不可变 2 const与指针 1 const在 前面 const char p p是const p可变
  • 浅析eTS的起源和演进

    引言 Mozilla创造了JS Microsoft创建了TS Huawei进一步推出了eTS 从最初的基础的逻辑交互能力 到具备类型系统的高效工程开发能力 再到融合声明式UI 多维状态管理等丰富的应用开发能力 共同组成了相关的演进脉络 原文
  • zookeeper常用命令详解

    目录 1 zkCli sh客户端 2 多节点类型创建 3 查询节点 4 set数据 5 删除节点 6 权限设置 7 其他命令 注意我这里用的是官方最稳定的版本3 7 1 版本之间有个别命令是有差距的 1 zkCli sh客户端 zkCli
  • 区块链技术在金融行业的应用

    作为比特币背后的分布式账本技术 区块链 它的热潮似乎已经无可阻挡 在区块链的创新和应用探索中 金融是最主要的领域 现阶段主要的区块链应用探索和实践 也都是围绕金融领域展开的 在金融领域中 区块链技术在数字货币 支付清算 智能合约 金融交易
  • tmux的使用方法和个性化配置

    tmux的使用方法和个性化配置 tmux是一个优秀的终端复用软件 即使非正常掉线 也能保证当前的任务运行 这一点对于 远程SSH访问特别有用 网络不好的情况下仍然能保证工作现场不丢失 此外 tmux完全使用键盘 控制窗口 实现窗口的切换功能
  • autorelease(IOS开发)的原理详解

    转载出处 http tieba baidu com p 3427605546 转载出处 http blog csdn net c395565746c article details 7613814 当您向一个对象发送一个autoreleas
  • [激光原理与应用-64]:激光器-器件 - 光电二极管

    第1章 概述 光电二极管 Photo Diode 和普通二极管一样 也是由一个PN结组成的半导体器件 也具有单方向导电特性 但在电路中它不是作整流元件 而是把光信号转换成电信号的光电传感器件 普通二极管在反向电压作用时处于截止状态 只能流过
  • STM3216位IO口操作的一些教训,STM32操作IO口的寄存器是16位,但是高低8位分别并口操作不同的器件,怎么办,会覆盖数据。BSRR 设计的目的就是为了能同时操作想修改的位0不影响1或置1或0

    STM3216位IO口操作的一些教训 yuanmeixiang 2017 05 05 20 12 24 8783 收藏 9 分类专栏 STM32 文章标签 stm32 8位操作 版权 最近在用TFT屏的时候走啦不少弯路 因为TFT屏都是16
  • sublimeText竖向多行选择快捷键

    Shift 鼠标右键
  • Navicat使用HTTP通道连接MySQL(通过php代理连接数据库)

    文章来源 https blog ll00 cn archives 127 html 问题描述 通过web服务器访问db服务器 因为db服务器没有外网ip 不支持外网直接访问 web服安装了php 有外网IP 支持外网http访问 补充 什么
  • unity 3D 远程关机

    远程关机的方法很多 首先就是调用系统的运行命令 其次也可以费别写一个服务端和客户端 当然我们也可以借助第三方插件来实现远程关机 第一种 调用系统的运行命令 这个就非常简单了 直接打开cmd exe文件 写入关机命令就行了 System Di
  • 因子【Wannafly挑战赛25 A】

    题目链接 思路 遇到N 这样的大数很显然是没办法直接去处理的 题目中告诉我们的已知是 N P k 0与 N P k 1 0 怎么处理N 是一个很复杂的事情 那我们从P开始考虑 尝试着将P拆成几个质因子的乘积形式 例如12可以拆成2 2 3的
  • 整数乘法运算

    在高级语言中 两个n位整数相乘得到的结果通常也是一个n位整数 即结果只取2n位乘积中的低n位 这导致乘法运算得到结果必须在范围 2n 1 lt x y lt 2n 1才不会溢出 假设为4位 进行52 0101 0101 0101 0101