尽量不要写 if(((X - Y)- Z) > 0 )这样的判断,而要写成 if((X - Y) > Z )

原创 2013年12月04日 22:07:14

        尽量不要写  if(((X - Y)- Z) > 0 )这样的判断,而要写成 if((X - Y)  > Z )。

        因为若X或Y中有一个是无符号整形,那这个条件就永远成立了。

        我在这个坑上跌过2次,一次是一个有符号变量,一个无符号变量,导致条件永远成立;另一次是一个有符号变量和一个返回值是无符号整形的函数做差,导致条件永远成立。

例:while( ((c_stDealBufInfo.iEndNo - c_stDealBufInfo.iStartNo) - sizeof(SDTP_MSG_HEAD_S)) > 0 )

 

很多情况下,若你忽略了整形提升, 如sizeof的返回值是无符号的,所以上面的条件永远成立。

要改成:

    while( (c_stDealBufInfo.iEndNo - c_stDealBufInfo.iStartNo) > sizeof(SDTP_MSG_HEAD_S) )

这样虽然也做了整形提升,但是正常的iEndNo 是大于等于iStartNo的,所以也没事。

相关文章推荐

贴片陶瓷电容材质NPO、C0G、X7R、X5R、Y5V、Z5U区别

主要是介质材料不同。不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样。 在相同的体积下的容量就不同,随之带来的电容器的介质损耗、容量稳定性等也就不同。介质材料划按容量的温...

解方程正整数解 x^n+y^n=z^n 每天 看代码写代码之水题记录(1.8)费马大定理

题目真的好水:宝宝都不好意思贴出来:算了,就当作自己又认识一个数学知识。 问题 S: 最后的猜想 时间限制: 1 Sec  内存限制: 128 MB 提交: 39  解决: 10 状态...

JavaEE_Mybatis_SpringMVC_Mybatis_lesson10__利用foreach标签_拼接SQL串,实现IN(X,Y,Z,...的形式)

目的在mybatis下拼接串 ,   实现Preparing: SELECT * FROM user WHERE user.id IN ( ? , ? , ? )的形式。  同理可以实现 SELE...

STM32f103 读LIS302DL传感器X、Y、Z轴向寄存器

/*读LIS302DL传感器X、Y、Z轴向寄存器*/ @main.c#include "stm32f10x.h" #include "lcd.h" #include "stdio.h" #includ...

SPOJ - VLATTICE Visible Lattice Points(gcd(x,y,z)=1的对数/莫比乌斯反演)

题目链接: SPOJ - VLATTICE Visible Lattice Points 题意: 一个n*n*n的方格,从最左下角(0, 0, 0)最多可以看到多少个点?(不被遮挡)包括方格内部...
  • Ramay7
  • Ramay7
  • 2016年06月04日 13:57
  • 369

【2015ZUFE新生赛网络同步赛C】【水题 贪心】boom x乘(y+z)尽可能大

#include #include #include #include #include #include #include #include #include #include #include #...

Android X轴Y轴Z轴旋转

Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,一个简单的办法就是重写Animation。先看下效果图 具体实现代码:public class MyAni...

opencl:C++11下使用别名(x,y,z,hi,lo...)访问vector类型(cl_int2,cl_long16...)的元素

在gcc(5.2.0)下使用C++11写opencl的程序时,发现无法像内核代码一样对cl_int2这样的向量(vector)类型用pos.x,pos.y这样的方式来访问向量元素,只能用pos.s[0...
  • 10km
  • 10km
  • 2016年04月10日 10:57
  • 2999

Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)

本文主要介绍Android立体旋转动画,或者3D旋转,下图是我自己实现的一个界面   立体旋转分为以下三种:   1. 以X轴为轴心旋转   2. 以Y轴为轴心旋转 ...

USTCOJ 1271 方程X+2Y+5Z=N非负整数解计数

方程非负整数解计数:http://acm.ustc.edu.cn/ustcoj/problem.php?id=1271&contest=35 题目的大致意思,是读入一个非负整数N,然后求出X、Y、Z...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:尽量不要写 if(((X - Y)- Z) > 0 )这样的判断,而要写成 if((X - Y) > Z )
举报原因:
原因补充:

(最多只允许输入30个字)