美文网首页
记一次考虑int的取值范围的问题

记一次考虑int的取值范围的问题

作者: VincentPeng | 来源:发表于2019-04-18 17:53 被阅读0次

原因:

面试里涉及道一个题,就是只用string里的api,把字符串转成int值。
核心方法是,利用'0'~'9'字符的ASCII值取处理,'9'的ASCII的值-‘0’的就是int 9.
这些都不是今天关注的关键,今天关注的关键是其中关于转换如果超出int的存储范围怎么判断;

char a = strarr[i]
if (a>'0' && a<'9') {
//这里只能判断单个字符是不是属于数字,总体长度和存储范围无法保障4
// ‘0’ 是48
}

回顾一下基础

  • 1字节Byte等于8bit 8位二进制数
  • int 使用4个字节来表示的,等于使用了32位二进制数
  • 十六进制数用二进制表示需要使用4位二进制数 Oxf = 1111 (十进制上都是15),

处理

  1. 先使用long 型来装,
  2. 如果增长超过了限定就抛出异常
long num = 0;
for (int i = 0 ;i < arr.length();i++) {
//每次左移一位;补一位
num = 10*num + arr[i] - '0'
// 处理存储范围超限
    if ( num < 0x80000000 || num >0x7fffffff){
    //抛出超出存储范围异常
    }
}

0x80000000 就是16进制表示下的int最小值:换成二进制是,除了第一位是1之外,其他都是0的32位二进制数据
0x7fffffff 就是16进制表示下的int最大值,换成二进制是除了前四位是0111,其余每个四位都为1111的32位二进制数据

    public static void main(String[] args) {
       int a =  ( int)0xffffffff;
           a = 0x7fffffff;
      int b =  0x80000000;// -2147483648
           b =  0x80000001;    //-2147483647
      int c = 0xf;//c = 15
       System.out.println(a);
       System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println( (int)'0');//48
    }

看了下编译后文件,发现编译后,其实都是用的一种进制


编译后文件

相关文章

  • 记一次考虑int的取值范围的问题

    原因: 面试里涉及道一个题,就是只用string里的api,把字符串转成int值。核心方法是,利用'0'~'9'字...

  • C语言基础

    练习 字母大小写转换 十进制转二进制 奇偶数 两个数交换 int取值范围 int的取值范围为: -231——231...

  • int float double 取值范围

    int 在32位平台上面是2^32 = 2147483647int 在64位平台上面是2^64 = 9223372...

  • int unsigned

    INT 字段后面可以跟的"参数" INT[(M)][UNSIGNED][ZEROFILL] 取值范围如下: Ano...

  • C# 溢出检测checked 与 unchecked

    概述   首先,我们看一下这些数据类型的取值范围,我们举int为例,它的取值范围是(-2147483648~214...

  • flutter int类型取值范围注意

    描述 在java语言中,整型的数据类型有int和long类型;int数据范围:-2^31 ~ 2^31-1,lon...

  • FFmpeg DASH部分指令参数参考

    window_size 默认值:int:0 — 取值范围:[0, int_max]--清单中保留的最大段数 ex...

  • java好玩的现象

    什么情况可以使:i + 1 < i 当int取边界值得时候,成立。 int、long、long long取值范围:...

  • c语言有符号int取值范围

    结论,取值范围是-2^31~2^31-1(十六进制为0x80000000~0x7fffffff)。因为0既不是正数...

  • Random

    创建Random对象:Random xxx = new Random(); 创建一个没有取值范围的随机整数:int...

网友评论

      本文标题:记一次考虑int的取值范围的问题

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