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);

如果参数Xy相加不会产生溢出,这个函数就返回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

整数运算(加减法)详解相关推荐

  1. 浮点数的加减法运算过程详解(面向小白的)

    浮点数的加减法运算过程详解(面向小白的) 一. 浮点数在计算机内的表示 二. 浮点数的加减运算步骤 第一次写博客,难免有疏漏之处,如果有错误请批评指正,感谢! 对于浮点数的加减运算,书上写的名词太多, ...

  2. python布尔类型运算_Python对象类型及其运算方法(详解)

    基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...

  3. c语言 整数拆分,C++ 整数拆分方法详解

    一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...

  4. 运算符“||”与“|”,“”和“”的区别 (附带各类位运算符号详解(、|、^、~、<<、>>、>>>)

    区别一: 定义不同: || 和 | 都是表示"或",区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断. 区别二: 与操作和或操作的区别 (1)在Jav ...

  5. c语言 数字分离编程,C++ 整数拆分方法详解

    一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...

  6. 原创:Spark中GraphX图运算pregel详解

    原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...

  7. 站长在线Python精讲:Python中集合的交集、并集、差集和对称差集运算方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中集合的交集.并集.差集和对称差集运算方法详解>.主要讲的是集合运算的相关的概念,及运算方法,包括:集合的交集. ...

  8. mysql中整数数据类型tinyint详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1.1tinyint类型说明 1.2实践环境说明 1.3加unsigned属性 1.3.1SQL模式开启严格模式 1.3.2SQL模 ...

  9. java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)

    位运算种类 ~:按位取反 &:位与 |:位或 ^:异或 <<:左移 >>:右移 >>>:逻辑右移 注意这里没有<<<运算符 准备工作 ...

  10. python数组越界_python 整数越界问题详解

    python 内部自带大整数运算能力,整数运算不会溢出,只要内存足够,就oK 下面的例子演示了两个32位整数加法的情况(通过位运算实现),为了模拟溢出的效果,必须人工的进行位运算,~运算符除了求反,还 ...

最新文章

  1. JS判断数组里面是否包含指定的数
  2. gradle生命周期
  3. cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
  4. Ubuntu 12.10 正式发布
  5. 客户关系管理(第3版) Customer Relationship Management,3 ...
  6. Mybatis-Plus批量插入数据太慢,使用rewriteBatchedStatements属性优化,堪称速度与激情!
  7. 计算机视觉物体检测中面对的挑战
  8. 官宣:Linux 内核主要贡献者 Linaro「喜提」新任 CEO!
  9. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)...
  10. 为什么少有人在Windows电脑上安OS X?
  11. 联想y7000笔记本触摸板开启快捷键_关闭笔记本触摸板四种方法【图文教程】
  12. 【智能算法第一期】蚁群算法原理和多种改进方法
  13. Ajax不执行回调函数
  14. LeetCode 字典序排数(最优解法,不接受反驳)
  15. unity 神笔画画
  16. 前序中序、中序后序以及前序后序构造二叉树
  17. 【48. 贪心(区间选点)】
  18. 电话号码分身 java,每日一题C++版(电话号码分身)
  19. SYN Flood攻击原理及防御技术
  20. [MRCTF2020]PYWebsite -wp

热门文章

  1. 如何开发在线教学系统,提供线上教学平台的解决方案
  2. Flutter开发之——文件系统目录pathprovider
  3. 微服务治理之分布式链路追踪--3.zipkin实战
  4. Linux 安装 scidavis
  5. Python分析并爬取起点中文网的章节数据,保存为txt文档
  6. Python批量处理Excel数据后,导入SQL Server
  7. Axios源码深度剖析
  8. 即时通讯环信IM的集成使用
  9. 环信IM SDK使用(四):环信会话列表实现及相关接口介绍
  10. os.path.dirname(os.path.realpath(__file__))