美文网首页
用位运算判断int类型变量越界

用位运算判断int类型变量越界

作者: enble | 来源:发表于2018-06-02 18:52 被阅读0次

今天在做一道oj题的时候,遇到了一个情景,需要判断经过操作后的int类型数是否越界。我直接很暴力地比较和int类型的最大最小值来判断是否越界。但还想思考一下用位运算判断是否越界的方法,顺便巩固一下位运算和补码的知识。

//resault是long类型变量,语言是java
if(resault>Integer.MAX_VALUE||resault<Integer.MIN_VALUE) {
    System.out.println("发生溢出");
}

情景描述:

现用一个long类型变量存储一个整形数,要求判断将其强转成int类型是否会发生溢出。

问题分析:

int整形占4个字节,long整形占8个字节,若无溢出现象发生,正数的前32位均是0,负数的前32位均是1.所以即判断该变量前32位是否全0或全1,若是则无溢出现象。

且运算:

若前32位不是全1,全0,则可以判断其发生了溢出。或运算与且大同小异。

if ( (resault&0xFFFFFFFF00000000L )!= 0xFFFFFFFF00000000L &&
        (resault&0xFFFFFFFF00000000L)!=0 ) {
    System.out.println("发生溢出");
}

注意运算优先级

移位运算:

左移的本质是乘法,右移的本质是除法,除以2^n,对正数来说,除不尽舍去。对负数来说,除不尽商-1,因此正数能右移得到0,而负数无论怎么右移最大也只能得到-1,无法为0,成为1111……的形式。

if ( (resault>>32) != 0 && (resault>>32) != -1) {
    System.out.println("发生溢出");
}

相关文章

  • 用位运算判断int类型变量越界

    今天在做一道oj题的时候,遇到了一个情景,需要判断经过操作后的int类型数是否越界。我直接很暴力地比较和int类型...

  • 北大C++程序设计在线课笔记,位运算

    1.3 位运算位运算:用于对整数类型(int,char, long 等)变量中的某一位(bit),或者若干位进行操...

  • Reverse Integer失败

    失败 没办法在string builder 转成int的时候判断是否越界 /* 注意:判断是否越界; 1将int ...

  • 10.30

    32 位和 64 位的 JVM,int 类型变量的长度是多数?32 位和 64 位的 JVM 中,int 类型变量...

  • 位运算总结

    一、数据类型的位数 二、位运算符 三、常用计算 判断int型变量a是奇数还是偶数 求平均值 对于一个大于0的整数,...

  • dart(一)--变量,各数据类型

    变量 使用 if(xx is int)这种方式来判断变量类型。 Dart是强类型语言,但变量类型可以自动推断,所有...

  • JAVA

    JAVA 变量,类型,运算符,表达式 变量三要素: 类型 ,变量名 , 保存的值1.类型: 整数:int小数...

  • JAVA equalse & ==

    关于java里 判断变量是否相等的问题, 基本类型判断时我们用 == 判断的是他们的值是否相等,意味着 int a...

  • Python

    Python 算术运算符 假设变量a为20,变量b为10 变量的类型 整据类型可分为整数(int)浮点数(floa...

  • java-运算符

    Java运算符 int i=3%2.0;这是错误的表达式java定义的变量类型 ------变量类型应匹配对应的...

网友评论

      本文标题:用位运算判断int类型变量越界

      本文链接:https://www.haomeiwen.com/subject/nwnrsftx.html