抓了一个数据格式表示位数不够的bug,警示
来源:互联网 发布:python实现二叉树反转 编辑:程序博客网 时间:2024/05/02 00:09
代码是这样的:
新开两个指针:
long *p1=new long;
long *p2=new long;
其中:
*p1=-100000;
*p2=100000;
后面进行计算的时候,
long long res=*p1*(*p2);
得到的结果是:
res=-1410065408
显然,这里*p1被隐式转换成了long,然后两个long相乘,结果溢出了。
正确的结果是:
res=-1E10
在C++ primer第156页讲过,数组会隐式转换为指向第一个元素的指针。
所以,C++将“指向new开辟的动态内存的”指针隐式转换为了long类型。
但是long只有32位。这里会溢出。
所以一种方法是先强制转换:
res=(long long)(*p1)*(long long)(*p2);
当然更好的方法是,把long long定义为int64。
然后开辟64位的存储空间:
int64 *p1=new int64;
int64 *p2=new int64;
int64 res=*p1*(*p2);
完毕。
0 0
- 抓了一个数据格式表示位数不够的bug,警示
- java 一个数字的位数不够怎么在前面加0
- linux printf 的数据格式表示
- 一个警示
- 三天的努力,只弄懂了一个多位数相加
- 修改了gnokii的一个BUG
- 解决了一个困惑很久的bug
- 一个调了一天的bug
- 修订了一个字符集相关的bug
- 发现了Android RadioGroup的一个Bug
- 一个解了两次的bug
- 发现了Android RadioGroup的一个Bug
- 发现了一个gdb的小bug
- 固定数据的位数,不够在前面补0
- java 保留字符串数字的位数,不够前面补0
- java 保留字符串数字的位数,不够前面补0
- 巧妙计算一个数二进制表示法中1的位数
- Bug模式之写入的数据格式出错
- 第八周 项目三(3)-字符的删除
- broadccastreceiver
- 使用 Google Guava 美化你的 Java 代码:1~4
- 支持向量机:Duality
- PDB Files: What Every Developer Must Know
- 抓了一个数据格式表示位数不够的bug,警示
- vxWorks shell命令
- python - web框架 - flask 问题处理
- 利用Cydia Substrate进行Android HOOK
- 反向传导算法 & SOFTMAX & Innerproduct_layer.cpp & softmax_loss_layer.cpp
- windows下有哪些有用的系统命令
- USB-OTG(on-the-go)
- sql触发器(转载自)
- android-circlebutton介绍原理