首页 > 其他分享 >基本数据类型在转换时的注意点

基本数据类型在转换时的注意点

时间:2022-11-29 14:58:04浏览次数:52  
标签:arr 转换 int 数据类型 long 注意 Integer 溢出 MOD

基本数据类型在转换时的注意点

以Java的两种常用数值类型为例long, int

常用的一种错误的防止溢出的写法是

int a = ???????, b = ????????;
long c = a * b;

当a*b超出Integer的表达范围时,例如 a = Integer.MAX_VALUE, b=2

此时按溢出处理

int a = Integer.MAX_VALUE, b = 2;
long c = a * b;
System.out.println(c);
// c = -2

IDEA 在编码时给出了一种建议

// a * b: integer multiplication implicitly cast to long 
int a = Integer.MAX_VALUE, b = 2;
long c = (long) a * b;
System.out.println(c);
// c = 4294967294

所以正确的操作是,在溢出可能发生的情况下,将某个绝对不会超出类型范围的的变量转换为接收的类型,例如案例里的int a, int b

再有复杂的案例, 如

long res = 0;
int[] arr = .... ;
int n = arr.length;
for (int i = 0; i < n; i++) {
    // 注意溢出问题
    // int 变量的运算, 即使使用 long 接收, 运算过程也会发生精度丢失
    // 因此将其中绝对不会超出 int 范围的值转换为 long
    // 保证整个运算使用 long 
    res = ( res + (long) arr[i] * (i - leftPos[i] + 1) * (rightPos[i] - i + 1)) 
%MOD;
    // 注意取模公式 (p*q)%MOD = (p%MOD * q%MOD)%MOD
}

对于 int[] 我们是能够保证不会出现溢出的,因此将它作为转换的对象,案例里的 (long)

表达式中的运算按照式中元素的最高精度计算,

案例中(long) arr[i]保证了表达式后的运算按照long类型计算,避免了溢出(在long范围内)

标签:arr,转换,int,数据类型,long,注意,Integer,溢出,MOD
From: https://www.cnblogs.com/jentreywang/p/16935371.html

相关文章

  • 使用Javascript/jQuery将javascript对象转换为json格式数据
    Javascript自带的eval()函数能够将json数据转换成Javascript对象。但是,却没有提供将Javascript对象序列化为json格式的函数。varjson='{"name":"John"}';varobj=eva......
  • cudnn Backend API注意事项
    一、在包含多个节点的图中,不支持in-placenode。(如果图只包含一个节点,支持in-placenode)Notethatgraphswithmorethanoneoperationnodedonotsupportin-placeo......
  • openssl 在线证书转换、IIS 导入证书
    这个转换出来的导入不到IIS里面,提示密码不对https://www.nethub.com.hk/tw/ssl-certificates/ssl-converter/在线证书转换这个转换的可以导入到IIShttps://www.cloudmax......
  • 论文赏析【EMNLP19】多粒度自注意力机制(MG-SA)
    论文地址Multi-GranularitySelf-AttentionforNeuralMachineTranslation[1]介绍现在主流的机器翻译模型基本都是采用多头注意力机制来对句子进行编码解码,但是有一些研究......
  • Java基础语法(2)数据类型
         ......
  • 【小航的算法日记】进制转换(二) - 进阶
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:202.快乐数​​​​解:​​​​题:168.Excel表列名称​​​​解:​​​​题:171.Excel表列序号​​​​解:​​......
  • 【小航的算法日记】进制转换(一) - 入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer15.二进制中1的个数​​​​解:​​​​题:258.各位相加​​​​解:​​​​题:1290.二进制链表转......
  • SQL常用日期格式化转换与百分数转换
    目录SQL将小数转为保留两位的百分数常用的日期格式化补充:秒/毫秒转为持续时间常用拼接方式:本篇开启数据库在工作中常用到的格式转换与工具,欢迎大家评论留言......
  • 类型转换
    类型转换Java是强类型语言,进行有些运算时,需要用到类型转换。数据类型转换时的优先级:低 ----------------------------------->高byte,short,char->int->long->f......
  • 类型转换
    类型转换由于Java是强类型语言,所以进行某些运算的时候,需要用到类型转换。低--------------------------------->高byte,short,char->int->long->float->double//小......