c-判断32位数相加溢出问题?

问题描述

判断32位数相加溢出问题?
编写了一个程序,两个有符号的32位数相加
如果正溢出,则输出 2147483647;
如果负溢出,则输出(-2147483647-1);
如果不溢出,则输出 运算结果。
然后试了几个数,并不能理解输出的结果,请一一指出每条运算结果的解释,谢谢。

解决方案

首先要看你的程序里面整数类型是int还是unsigned int他们两个的范围不同, int 的取值范围是 -2147483648 ~ +2147483647, 而unsigned int 的
取值范围是0 ~ 42亿(具体值我也就不算了) 若果你用的是int(按你图片上的输入来解释) ①你输入命令1 并且输入两个有符号数 - 2147483648, -128;
他们两个的和相当于2147483747-128 = 2147483619(想象成表盘就清楚了); 而-2147483776这个值并不在(int 的取值范围是 -2147483648 ~ +2147483647)这个范围内
,所以负向溢出。(注意:他所谓的正负向溢出指的是 若此数超过范围的左(负)边界则为负向溢出,相反 若此数超过范围的右(正)边界则为正向溢出) 同理,
②你输入命令1 并且输入两个有符号数 - 2147483648, -2147483648;他们两个的和是0,而0又在取值范围内,所以不溢出,输出是0没问题。③
你输入命令1 并且输入两个有符号数 - 2147483649(相当于2147483647), -128;他们两个的和是2147483519, 在范围内,输出2147483519
④你输入命令1 并且输入两个有符号数 - 2147483650(相当于2147483646), 1;他们两个的和是2147483647,在范围内,输出2147483647。

其实要理解给你看看图片就可以了:

解决方案二:
你的32位的溢出指的是int型的数据所以你要将数据定义成int型的数据才可以有这样的效果的。

解决方案三:
整数相加溢出判断问题

解决方案四:
这是大数相加问题,不是简单的数相加了,应该通过字符串来变相相加

解决方案五:
这是大数相加问题,不是简单的数相加了,应该通过字符串来变相相加

时间: 2024-10-31 01:40:05

c-判断32位数相加溢出问题?的相关文章

0~9十个数,每个数只能使用一次,组成两个三位数相加和为四位数的算法

这几天上网,看到百度里面有人问这一道题目,0~9十个数,组成如下加法式 *** + *** = ****,每个数字都只能使用一次,问一共多少中组合? 今天,就用C#语言来写一下,解出这道题,其他语言算法相同,只是语法不同,这里由于时间关系,不再贴出代码. 针对大家提出的优化建议,已经将优化方案写出,下面是具体优化方案: 这里先讲解一下思路,首先我们是程序员,不是数学家,我们是站在编程的角度思考问题.这里是两个三位数相加,得到一个四位数,所有数字不能重复,最大的和应该为987 + 654 = 16

java实现:将一个数各个位数相加

前面已经实现过这个程序,现在我们就不多说了,直接更改C的源码,实现这个JAVA程序. import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //System.out.println("Hello java"); Scanner s = new Scanner(System.in); System.out.println("请输入一个数字"

c语言编程-如何判断整数位数还有逆序打印各位数字

问题描述 如何判断整数位数还有逆序打印各位数字 一个正整数,先判断他的位数输出,在逆序打印出各位数字..............为什么要30个字呢.. 解决方案 #include <stdio.h> void foo(int n, int acc) { if (n == 0) { printf("n%dn", acc); return; } printf("%d", n % 10); foo(n / 10, acc + 1); } int main()

C#如何判断操作系统位数是32位还是64位

方法一: 对于C#来说,调用WMI是一种简单易行的方式.我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽.AddressWidth的值受CPU和操作系统的双重影响. 具体的值如下面的表格所示:   32bit OS 64bit OS 32bit CPU AddressWidth = 32 N/A 64bit CPU AddressWidth = 32 AddressWidth = 64 可以用下面的C#代码得到AddressWidth的值 (注意需添加

ARM指令集

ADC 带进位的32位数加法 ADD 32位数相加 AND 32位数的逻辑与 B 在32M空间内的相对跳转指令 BIC 32位数的逻辑位清零 BKPT 断点指令 BL 带链接的相对跳转指令 BLX 带链接的切换跳转 BX 切换跳转 CDP CDP2 协处理器数据处理操作 CLZ 零计数 CMN 比较两个数的相反数 CMP 32位数比较 EOR 32位逻辑异或 LDC LDC2 从协处理器取一个或多个32位值 LDM 从内存送多个32位字到ARM寄存器 LDR 从虚拟地址取一个单个的32位值 MC

C#中如何编程判断Office是32位还是64位

问题描述 最近发现编写的程序在目标机器安装了64位的MSOffice时运行会出错.所以想在程序中判断目标机器中安装的Offic是32位还是64位.在VBA中有个Win64常量可以判断,但是不知道C#中如何使用这个变量. 解决方案 解决方案二: 解决方案三:引用1楼duanzi_peng的回复:这里给出的方法判断的结果不对啊解决方案四:引用1楼duanzi_peng的回复:这里给出的方法判断的结果不对啊解决方案五:引用1楼duanzi_peng的回复:这里给出的方法判断的结果不对啊解决方案六: 解

判断Unix系统及库文件是32位还是64位的详解_Linux

判断Unix系统及库文件是32位还是64位的详解 一.查看系统32还是64位系统 bootinfo -y    查看硬件位数 bootinfo -K   查看内核位数 二.查看库文件是32位还是64位 1.使用file命令 Linux: # file libnss1_files-2.2.4.so libnss1_files-2.2.4.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped # file lib

Linux如何使用shell查看Linux是32位还是64

  现在绝大多数用户使用的是Windows系统,都知道Windows系统有分32位和64位,其实Linux系统也有32位和64位之分,你知道你的Linux系统是几位的吗?下面小编就教你如何使用shell查看Linux是32位还是64位. 手动查看系统位数 查看linux系统位数,可以分别执行以下两个命令 getconf WORD_BIT 用于获取word的位数 getconf LONG_BIT 用于获取long的位数 对于64位系统以上两个命令应该分别得到32和64. 判断linux系统是32位

java 编程-java问题~数字判断!~~~~~

问题描述 java问题-数字判断!----- 求教控制台随机输入一个数 判断是几位数? 把各位上的数字相加和是多少? 把数字倒序输出? 判断是否回文数? 解决方案 大致可以这样写 import java.io.IOException; import java.util.Scanner; /** * Created by obo on 16/3/13. */ public class Test { public static void main(String []args) throws IOEx