整数运算(加减法)详解
2.7 整数运算——加减法
无符号加法:考虑两个非负整数x和y,满足0≤x, y≤2w-1。每个数都能表示为w位无符号数字。
无符号运算可以被视为一种模运算形式。无符号加法等价于计算和模上2w, 通过简单的丢弃x+y的w+1位表示的最高位,来计算这个数值。
一个算术运算溢出,是指完整的整数结果不能放到数据类型的字长限制中去。当执行C程序时,不会将溢出作为错误而发信号。
补码加法:
举例:
补码的非:
位级补码非的第一种方法是对每一位求补,再对结果加1。
练习:
答案:
int uadd_ok(unsigned x, unsigned y){if(y<-x){return 1;}else{return 0;}
}
标准答案:
答案:
十六进制 |
十进制 |
十进制 |
十六进制 |
0 |
0 |
0 |
0 |
5 |
5 |
11 |
B |
8 |
8 |
8 |
8 |
D |
13 |
3 |
3 |
F |
15 |
1 |
1 |
答案:
x |
y |
x+y |
情况 |
|
[10100] -12 |
[10001] -15 |
[100101] -27 |
[00101] 5 |
1 |
[11000] -8 |
[11000] -8 |
[110000] -16 |
[10000] -16 |
2 |
[10111] -9 |
[01000] 8 |
[011111] -1 |
[011111] -1 |
3 |
[00010] 2 |
[00101] 5 |
[000111] 7 |
[00111] 7 |
3 |
[01100] 12 |
[00100] 4 |
[010000] 16 |
[10000] -16 |
4 |
练习题2.30写出一个具有如下原型的函数:
/* Determine whether arguments can be added without overflow */int tadd_ok(int x, int y);
如果参数X和y相加不会产生溢出,这个函数就返回1。
答案:
int tadd_ok(int x, int y){int sum=x+y;if(sum>0&&x<0&&y<0||sum<0&&x>0&&y>0){return 0;}else {return 1;}
}
答案:因为无论溢出与否,结果始终返回1。
答案:当y=Tmin时,x取任意时会产生错误的结果。
int tsub_ok(int x,int y){if(-y!=y&&y!=0){return tadd_ok(x,-y);}else{if(x>0){return 0;}else{return 1;}}
}
答案:
十六进制 |
十进制 |
十进制 |
十六进制 |
0[0000] |
0 |
0[0000] |
0 |
5[0101] |
5 |
-5[1011] |
B |
8[1000] |
-8 |
-8[1000] |
8 |
D[1101] |
-3 |
3[0011] |
3 |
F[1111] |
-1 |
1[0001] |
1 |
整数运算(加减法)详解相关推荐
- 浮点数的加减法运算过程详解(面向小白的)
浮点数的加减法运算过程详解(面向小白的) 一. 浮点数在计算机内的表示 二. 浮点数的加减运算步骤 第一次写博客,难免有疏漏之处,如果有错误请批评指正,感谢! 对于浮点数的加减运算,书上写的名词太多, ...
- python布尔类型运算_Python对象类型及其运算方法(详解)
基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...
- c语言 整数拆分,C++ 整数拆分方法详解
一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...
- 运算符“||”与“|”,“”和“”的区别 (附带各类位运算符号详解(、|、^、~、<<、>>、>>>)
区别一: 定义不同: || 和 | 都是表示"或",区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断. 区别二: 与操作和或操作的区别 (1)在Jav ...
- c语言 数字分离编程,C++ 整数拆分方法详解
一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...
- 原创:Spark中GraphX图运算pregel详解
原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...
- 站长在线Python精讲:Python中集合的交集、并集、差集和对称差集运算方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中集合的交集.并集.差集和对称差集运算方法详解>.主要讲的是集合运算的相关的概念,及运算方法,包括:集合的交集. ...
- mysql中整数数据类型tinyint详解
文章来源: 学习通http://www.bdgxy.com/ 目录 1.1tinyint类型说明 1.2实践环境说明 1.3加unsigned属性 1.3.1SQL模式开启严格模式 1.3.2SQL模 ...
- java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)
位运算种类 ~:按位取反 &:位与 |:位或 ^:异或 <<:左移 >>:右移 >>>:逻辑右移 注意这里没有<<<运算符 准备工作 ...
- python数组越界_python 整数越界问题详解
python 内部自带大整数运算能力,整数运算不会溢出,只要内存足够,就oK 下面的例子演示了两个32位整数加法的情况(通过位运算实现),为了模拟溢出的效果,必须人工的进行位运算,~运算符除了求反,还 ...
最新文章
- JS判断数组里面是否包含指定的数
- gradle生命周期
- cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
- Ubuntu 12.10 正式发布
- 客户关系管理(第3版) Customer Relationship Management,3 ...
- Mybatis-Plus批量插入数据太慢,使用rewriteBatchedStatements属性优化,堪称速度与激情!
- 计算机视觉物体检测中面对的挑战
- 官宣:Linux 内核主要贡献者 Linaro「喜提」新任 CEO!
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)...
- 为什么少有人在Windows电脑上安OS X?
- 联想y7000笔记本触摸板开启快捷键_关闭笔记本触摸板四种方法【图文教程】
- 【智能算法第一期】蚁群算法原理和多种改进方法
- Ajax不执行回调函数
- LeetCode 字典序排数(最优解法,不接受反驳)
- unity 神笔画画
- 前序中序、中序后序以及前序后序构造二叉树
- 【48. 贪心(区间选点)】
- 电话号码分身 java,每日一题C++版(电话号码分身)
- SYN Flood攻击原理及防御技术
- [MRCTF2020]PYWebsite -wp
热门文章
- 如何开发在线教学系统,提供线上教学平台的解决方案
- Flutter开发之——文件系统目录pathprovider
- 微服务治理之分布式链路追踪--3.zipkin实战
- Linux 安装 scidavis
- Python分析并爬取起点中文网的章节数据,保存为txt文档
- Python批量处理Excel数据后,导入SQL Server
- Axios源码深度剖析
- 即时通讯环信IM的集成使用
- 环信IM SDK使用(四):环信会话列表实现及相关接口介绍
- os.path.dirname(os.path.realpath(__file__))