C语言之溢出
Posted 海洋想想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之溢出相关的知识,希望对你有一定的参考价值。
源代码
/**
*********************************************************************
* @file overflow.c
* @author Zhen Haiyang
* @version 1.0
* @date 2021-06-02 23:37:15
* @brief 验证溢出问题
*********************************************************************
*/
#include <stdio.h>
int main()
unsigned int x = 0xF0000000;
printf("%u\\n", x);
unsigned long long y = (unsigned long long)x * 2;
printf("%llu\\n", y);
y = x * 2;
printf("%llu\\n", y);
return 0;
输出结果
4026531840
8053063680
3758096384
分析
c语言中的类型转换方式为:
- 整形运算总是至少按照整数类型(int)的精度进行的。也就是说,若两个char类型的加法的运算过程可以分解为:先将两个char类型转换为int型,计算结果存储为int型,最后强转为char类型存储。
- 如果两个运算数的精度有一个超过int型。若两个操作数属于不同类型,那么,将运算将两个运算数都转换成高精度类型再参与运算。若两个操作数为相同类型,即使是乘法,还是会按照相同类型计算存储结果。这就是可能会造成溢出现象,需要注意。
以上是关于C语言之溢出的主要内容,如果未能解决你的问题,请参考以下文章