精华内容
下载资源
问答
  • Int数据溢出问题
    千次阅读
    2020-07-28 07:15:25
    Int数据溢出问题

    问题描述:

    ​ 当我们处理一些整数数据的时候,经常遇到数据溢出的问题.造成程序出错.当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。

    int的取值范围

    // int类型的最大数值
    int maxValue = Integer.MAX_VALUE;
    // int类型的最小数值
    int minValue = Integer.MIN_VALUE;
    //打印这两个数值
    System.out.println("最大的int类型数据为:" + maxValue);//最大的int类型数据为:2147483647
    System.out.println("最小的int类型数据为:" + minValue);//最小的int类型数据为:-2147483648

    最大值加一最小值减一

    // 如果最大值加一会出现什么结果
    maxValue += 1;
    // 打印这个数值
    System.out.println("最大的int类型数据+1为:" + maxValue);//最大的int类型数据+1为:-2147483648
    // 最小值减一
    minValue-=1;
    System.out.println("最小的int类型数据-1为:" + minValue);//最小的int类型数据-1为:2147483647

    溢出处理

    /*
    为了避免 int 类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或
    是在变量前面加上 long,作为强制类型的转换。
    */
    int x = Integer.MAX_VALUE;
    System.out.println("X = " + x);// X = 2147483647
    System.out.println("X+1 = " + (x+1));// X+1 = -2147483648
    System.out.println("X+1L = " + (x+1L));// X+1L = 2147483648
    System.out.println("X+3L = " + (x+3L));// X+3L = 2147483650

    完整代码

    public static void main(String[] args) {
    // int类型的最大数值
    int maxValue = Integer.MAX_VALUE;
    // int类型的最小数值
    int minValue = Integer.MIN_VALUE;
    //打印这两个数值
    System.out.println("最大的int类型数据为:" + maxValue);//最大的int类型数据为:2147483647
    System.out.println("最小的int类型数据为:" + minValue);//最小的int类型数据为:-2147483648
    int a = maxValue + minValue;
    System.out.println("最大值加上最小值"+a);//-1

    // 如果最大值加一会出现什么结果
    maxValue += 1;
    // 打印这个数值
    System.out.println("最大的int类型数据+1为:" + maxValue);//最大的int类型数据+1为:-2147483648
    // 最小值减一
    minValue-=1;
    System.out.println("最小的int类型数据-1为:" + minValue);//最小的int类型数据-1为:2147483647
    /*
    为了避免 int 类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或
    是在变量前面加上 long,作为强制类型的转换。
    */
    int x = Integer.MAX_VALUE;
    System.out.println("X = " + x);// X = 2147483647
    System.out.println("X+1 = " + (x+1));// X+1 = -2147483648
    System.out.println("X+1L = " + (x+1L));// X+1L = 2147483648
    System.out.println("X+3L = " + (x+3L));// X+3L = 2147483650
    }

    相关练习

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
    int ret=0;
    while (x != 0) {
    int pop = x % 10;
    if (ret > Integer.MAX_VALUE / 10 || (ret == Integer.MAX_VALUE / 10 && pop > 7))
    //最大值最后一位是7
    return 0;
    if (ret < Integer.MIN_VALUE / 10 || (ret == Integer.MIN_VALUE / 10 && pop < -8))
    //最小值最后一位是8
    return 0;
    ret = ret * 10 + pop;
    x /= 10;
    }
    return ret;
    /*
    java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647
    可以用 Integer.MAX_VALUE 表示它,即 int value = Integer.MAX_VALUE;
    Integer.MAX_VALUE + 1 = Integer.MIN_VALUE = -2147483648

    */
    更多相关内容
  • 看了图,我第一感觉就是数据溢出了。数据超出能表示的最大值,就会出现奇奇怪怪的结果。 然后,他继续发了张图,内容是 print(100000*208378),就是直接打印上图的 E[0]*G[0],结果是 20837800000,这是个正确的结果...
  • 数据溢出的处理

    2015-12-18 18:45:19
    对于阶乘如何向,相信学过语言的偶不陌生,一个递归函数搞定。但是当求21以上的阶乘时,我们发现数据溢出了,最多只能显示17位有效位。所以我们采用最基本的乘法运算,计算一个结果放进数组中,如此循环。
  • 主要介绍了Python 的整数与 Numpy 的数据溢出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了MySQL整型数据溢出的解决方法,本文出现整型溢出的mysql版本是5.1,5.1下整型溢出不会报错,而会变成负数,需要的朋友可以参考下
  • 为了提高35 kV变电站造价预测能力,需要进行造价模型异常数据溢出控制,提出基于差异度特征分析的35 kV变电站造价模型异常数据溢出控制方法。构建35 kV变电站造价模型异常数据溢出的多层次参数约束模型,确定35 kV...
  • 数据溢出

    千次阅读 2020-03-16 12:09:16
    一个n位二进制数,它的补码可以表示的数据范围是[2^(n-1), 2^(n-1)-1]。 1 溢出只能发生在同号之间 异号相加:a>0,b<0 a+b=c =>b<c<a,a,b已经能够表示,那么a,b之间的数都能够表示,所以异号相加不...

    有符号数溢出
    一个n位二进制数,它的补码可以表示的数据范围是[2^(n-1), 2^(n-1)-1]。

    1 溢出只能发生在同号之间
    异号相加:a>0,b<0
    a+b=c =>b<c<a,a,b已经能够表示,那么a,b之间的数都能够表示,所以异号相加不存在溢出问题

    而两个正数相加有可能大于最大上限,两负数相加有可能小于最小下限,所以存在溢出的可能性
    2 常见的几种溢出情况

    正数+正数=负数
    example:0101+0011=1000 符号位变换0+0=1

    负数+负数=正数
    example:1001+1010=10011,(要求是四位二进制数,于是去掉一个符号位结果为0011)

    3 溢出的判断标准:
    符号端进位为c1,数据段最高位进位为c0
    c0⊕c1=overflow
    采用双符号位ffddd变形补码表示(一个f表示一个符号位,一个d表示一个数据位)
    负数为11ddd
    正数为00ddd
    f1⊕f2=overflow(即两符号位不相同时溢出)

    设A+B=S,A的符号位为X0,B的符号位为Y0,S的符号位为S0
    根据上述2中分析,溢出时符号位变化为
    0+0=1(001)
    1+1=0(110)
    做出卡诺图
    在这里插入图片描述
    由此
    在这里插入图片描述
    无符号数溢出
    在这里插入图片描述
    与题无关:
    -128的原码和补码都是10000000
    在这里插入图片描述

    引用自:https://zhidao.baidu.com/question/303175158130244284.html
    http://www.icourse163.org/learn/HUST-1003159001?tid=1450203445#/learn/content?type=detail&id=1214319393

    展开全文
  • Java数据溢出代码详解

    2020-08-29 05:51:39
    主要介绍了Java数据溢出的相关内容,包括具体代码示例,分析比较详细,希望对大家有所帮助,感兴趣的朋友可以参考下。
  • C语言数据溢出

    2021-11-02 20:01:26
    char 1、char是一个字节,8bit,我们在采用unsigned char的数据类型的情况下 如果我们数据产生溢出(超过2^8) 那么我们最终得到的结果将对2^8(256)取余,如: unsigned char x = 0xff; x++; printf("%d\n",++x); ...

    文章目录

    int 类型

    unsigned int num = -1;
    	printf("%u", num);
    

    在这里插入图片描述
    解析:
    首先在寄存器产生一个负数-1,它在计算机中存储的补码是
    32个1,共32个二进制位,当按照赋值号赋给无符号num变量时,符号位变成数值位,所以按照无符号输出为4294967295。

    	short int s = 65535;
    	printf("%d", s);
    
    

    在这里插入图片描述
    解析:
    寄存器产生一个正数65535,故补码是16个1,当按照赋值号赋给有符号的s变量时,最高位变成符号位,则原码100000…001,所以输出-1。

    char

    1、char是一个字节,8bit,我们在采用unsigned char的数据类型的情况下

    如果我们数据产生溢出(超过2^8)
    那么我们最终得到的结果将对2^8(256)取余,如:

    unsigned char x = 0xff;
    x++;
    printf("%d\n",++x);
    

    输出的结果将是1;而不是257.

    2、对于signed的整数的溢出,C语言的定义是Undefined Overflow,也就是溢出的数正常显示,并不进行求余的运算。例如:

    signed char x = 0xff
    printf("%d\n",x);
    

    0xff----> 1111 1111 数在计算机的内存中是以补码的形式存在
    所以此数代表的数是:1000 0001也就是-1,所以输出是-1

    signed char x = 0x7f
    printf("%d\n",++x);
    

    0x7f---->0111 1111 那么该数据先换算成正常的数再执行加1操作(正数的补码是本身),那么加1变成:1000 0000这是-128的补码

    但是我们知道在signed char的数据中一共有8位,并且符号占1位,那么有7位数,所以最大是:0111 1111也就是127,所以128是溢出,所以我们直接显示溢出的那个数,那么上面的代码输出就是-128.

    展开全文
  • [C语言]数据溢出或会发生什么?

    千次阅读 多人点赞 2021-06-07 16:16:58
    C语言中数据具有数据类型属性,数据类型确定了数据所占的内存空间和数据范围,那么如果超出了这个数据范围会发生什么情况呢? 比如:char a = 200;wei

    C语言中数据具有数据类型属性,数据类型确定了数据所占的内存空间和数据范围,那么如果超出了这个数据范围会发生什么情况呢?

    比如:char  a = 200;为什么输出时-56呢?

              char型数据 -128的二进制为什么为1000 0000呢?

    想要知道上面这些问题的答案,要从数据在内存中的存储说起。

    数据在内存中的存储

    C语言规定,把内存的最高位作为符号位,在符号位中,用 0 表示正数,用 1 表示负数。

    在计算机内存中,整数一律采用补码的形式来存储。

    原码、反码、补码

    原码、反码、补码的理解

    ①原码

    将一个整数转换成二进制形式,就是其原码。原码就是一个整数本来的二进制形式。

    ②反码

    对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反

    ③补码

    对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。

    举例:

    所以,short a = 6;存的二进制是0b0000000000000110;

    而short a = -18;存的二进制是1111111111101110;

    short b = 0b1111111111101110;
    printf("%hd",b);

    数据溢出

    数据类型确定了这个空间所能盛放的数据的最大值和最小值。

    以char型为例:

    比如:char a;那么a的数据大小为:-2^7~2^7-1即:-128~127

    unsigned char a;那么a的取值范围为:0~2^8-1 即0~255

    如果使用char型存放一个200,那么就超出了char型数据所能表示的数据范围,程序会按照一定的规则将这个200转化为-128~127这个范围中的某个数后再去进行存储。

    数据溢出转换规则

    数据范围的表示是一个环状结构.

    如果数据增长到最大值,则数据从最小值方向开始依次递增

    如果数据减到最小值,则数据从最大值方向开始依次递减

    ①如果这个超出范围的数是正数,比如200,那么使用这个数据-256,看结果是否在-128~127范围内,如果不在继续-256,直到最后的结果在-128~127范围内。

    200 - 256 = -56在-128~127范围内,则将-56存入到a中,

    如果是char a = 400;400-256 = 144 > 127,则继续减256,144-256=-112 ,-112在-128~127范围内,则a中存储-112.

    ②如果这个超出范围内的数是负数,比如-400,那么使用这个数据+256,看结果是否在-128~127范围内,如果不在继续+256,直到最后的结果在-128~127范围内。

    char a = -400;

    -400 + 256 = -144,不在-128~127范围内,继续+256

    -144+256 = 112,在-128~127范围内,所以a中存储的是112,而不是-400.

     

     

     

     

    展开全文
  • Java -- 数据溢出及解决办法

    千次阅读 2020-08-18 14:58:54
    什么叫数据溢出。 首先,基本的数据类型(long,int,short,byte,char,float,double)都有自己能够保存的数据范围。 long(长整型)的数据范围:-9223372036854775808——9223372036854775807; int(整型)的...
  • 数据溢出是什么意思

    千次阅读 2021-07-28 10:41:13
    原标题:数据溢出是什么意思数据溢出在计算机中,当要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出。溢出原因数据类型超过了计算机字长的界限就会出现数据溢出的情况。导致内存溢出问题的原因有...
  • 数据溢出相关计算

    2020-11-01 18:22:29
    1、整数反转 /** * 整数反转 * 例:142 ==> 241 * * 14 2 * 1 24 * 0 241 * ... * 反转后数据溢出 * int型的数值范围是 -2147483648~2147483647 * @param x * @return */ public i
  • 主要介绍了Java中在时间戳计算的过程中遇到的数据溢出问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本篇文章是对用checked语句防止数据溢出的解决方法进行了详细的分析介绍,需要的朋友参考下
  • 数据溢出处理方法(C语言)

    千次阅读 2021-04-10 13:24:12
    数据溢出判断与处理的方法(C语言) 该文章仅含代码部分,较为简单,因此不做过多解释~ //数据溢出判断与处理样例 #include"stdio.h" #include"math.h" #include"stdlib.h" void main() { unsigned int a; int ...
  • 整型数据溢出

    2018-11-23 17:42:29
    整型数据的溢出说明。介绍了C语言中关于整型数据溢出的相关知识,适合于初学者的理解应用。
  • c语言 数据溢出时会输出什么

    千次阅读 2021-09-01 09:25:50
    当int类型会溢出时,可以用long 类型或者long long 类型 如果超出了分配的范围,系统并不会报错,那么,输出的数字是什么呢? 一、整型数据常见的存储空间和值的范围 二、数据转换规则 ...
  • Uart之数据溢出

    千次阅读 2018-11-25 17:54:38
    Uart之数据溢出 问题背景: 在项目现场实施项目的过程之中,出现了一个问题。stm32的控制器,莫名其妙会死机,不定时会出现这个问题。出现之后系统指示灯不在闪烁,网络死机,服务器再也ping不同,下位机的控制器。...
  • 今天在做数据导入达梦数据库时遇到个问题,时间日期类型数据溢出。 经过查找发现是timestamp类型精度值过小。 解决办法:
  • 这是一串有问题的代码: #include #define INF ... } 很蠢的错误,在定义时一定要弄清楚取值范围 例如: int 型的取值范围为:-2147483648~2147483647 大概是两亿多 所以对两亿左右或往上的数据,建议使用long型
  • Java的数据溢出问题及解决方法

    千次阅读 2019-05-26 22:45:03
    什么叫数据溢出。 首先,基本的数据类型(long,int,short,byte,char,float,double)都有自己能够保存的数据范围。 long(长整型)的数据范围:-9223372036854775808——9223372036854775807; int(整型)的...
  • C语言中的数据溢出(详一)

    千次阅读 2020-02-03 17:10:41
    数据溢出 1. 举个栗子 unsigned int num = -1; printf("%u", num); 输出结果是什么呢? 结果: 为什么会这样? 解析: 首先在寄存器产生一个负数-1,它在计算机中存储的补码是 32个1,共32个二进制位,当按照...
  • 数据溢出判断

    万次阅读 多人点赞 2019-05-03 15:58:20
    程序执行过程中,跑的都是数据,因此难免会有数据溢出的现象,那么, 1)数据溢出什么样子呢? 以byte类型为例,1byte有8bit,如果最高位向前有进位,那么就表示数据溢出。 eg: 1000 0000 +1000 0000 ——————...
  • 数据溢出和数据精度

    千次阅读 2017-12-12 08:47:02
    数据溢出和数据精度 标签(空格分隔): C 双学位高级语言程序设计 C数据类型 如果赋值运算左边的变量和右边的表达式的类型不一致,就可能发生数据溢出,造成数据精度的丢失。 float类型精度是6~7位有效数字,...
  • 问题:每进行一次递归,都会在栈上多加一层,所以递归太深的话会出现数据溢出的错误。函数调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈。 #include<iostream> using namespace std; int...
  • 编码中的小技巧之防止数据溢出

    千次阅读 2019-03-14 21:37:25
    //防止 (r+p)溢出 int q = p + (r - p)/2; mergeSort(A,p,q); mergeSort(A,q+1,r); merge(A,p,q,r); } private static void merge(int[] A, int p, int q, int r) { int i = p; int j = q+1; int ...
  • 由阶乘问题引发的关于数据溢出的讨论 为了对进程递归有更深入的理解,设计了一个计算输入数阶乘的小程序,该程序的最初版本如下(V1.0): //version: 1.0 #include <stdio.h> #include <stdlib.h> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429,213
精华内容 171,685
关键字:

数据溢出

友情链接: dengcha.rar