C语言负数转正数的隐藏缺陷
2013-07-24 15:30
78 查看
今天在写程序的时候发现了一个相当隐蔽的错误,查了好久才找到了这个缺陷,就是当我们在将一个负数变成正数的时候,一定要注意防止数据溢出。比如定义一个char型的变量a。。。。。。。。如下所示:
char a;
if (a<0)
{
a=-a;
}
printf("%d\n");
这几条语句在一般情况下是不会出问题的,比如我们使变量a=-10,输出为10;然而当a=-128时,问题就出现了,此时输出的仍然是-128(这是我在VC6.0上的测试结果),分析其中的原因才发现char型的数据的取值范围是-128~+127 所以当a=-128时a=-a;发生了溢出。。。。。。。。。。。。。。。。
char a;
if (a<0)
{
a=-a;
}
printf("%d\n");
这几条语句在一般情况下是不会出问题的,比如我们使变量a=-10,输出为10;然而当a=-128时,问题就出现了,此时输出的仍然是-128(这是我在VC6.0上的测试结果),分析其中的原因才发现char型的数据的取值范围是-128~+127 所以当a=-128时a=-a;发生了溢出。。。。。。。。。。。。。。。。
相关文章推荐
- 【C语言】将正数转成负数,将负数转成正数
- 【c语言】将正数变成相应的负数,将负数变成相应的正数
- 整型正数与负数是如何在机器(以stm32为例)中存储与传递的--结合C语言的数据类型转换讲解
- 【c语言】将正数变成对应的负数,将负数变成对应的正数
- C语言随机数,如何生成既有正数又有负数的随机数呢
- C语言正数和负数循环右移,左移,把某正数的第m位(从0开始)到n位取反
- 【C语言】输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
- C语言陷进和缺陷学习心得
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 数据结构第七周项目-负数把正数赶出队列
- 【第七周 项目3-负数把正数赶出队列】
- 第7周项目3 负数把正数赶出队列
- 第七周 项目3 - 负数把正数赶出队列
- 数据结构上机实践第七周项目3 - 负数把正数赶出队列
- 二进制编码系统中,负数比正数多一个(备忘)
- C语言允许数组下标是负数
- 【第七周项目3】负数把正数赶出队列
- 第7周项目3 - 负数把正数赶出队列
- C语言再学习 -- 负数
- 第七周【项目3 - 负数把正数赶出队列】