美文网首页
用位运算判断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类型变量越界

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