尽量不要写 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的,所以也没事。

找亲戚(两种方法)-360笔试题

问题描述:  n个人,m组亲戚关系,查找person1有多少个亲戚  规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 Inp...
  • u010887744
  • u010887744
  • 2015年09月30日 11:43
  • 1980

关于有序顺序表的比较的题目

设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表, A'和B'分别为A和B中除去最大共同前缀后的子表(例如, A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),...
  • u013228403
  • u013228403
  • 2014年04月09日 16:40
  • 871

输入三个整数x,y,z,请把这三个数由小到大输出。

package lianx; import java.util.Scanner; public class SanGeShu { // 输入三个整数x,y,z,请把这三个数由小到大输出。 pu...
  • hello_word2
  • hello_word2
  • 2016年09月04日 15:34
  • 2601

从X,Y,Z三个方向显示CT序列

function main() %MAIN Summary of this function goes here % Detailed explanation goes here % files=...
  • pmt123456
  • pmt123456
  • 2015年12月09日 16:19
  • 945

【笔试】15、输入三个整数x,y,z,请把这三个数由小到大输出。

/** * 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 * 时间:2015年7月29日11:01:06 * 文件:Lianxi15.java * 作者:cutter_poi...
  • cutter_point
  • cutter_point
  • 2015年08月10日 19:42
  • 1068

(五)IO库教程一--PCD(Point Cloud Data)文件格式

PCL中的3D特征PCD(Point Cloud Data)文件格式本文讲解了PCD(Point Cloud Data)的文件格式,还有在PCL中对它的用法PCD出现的背景PCD文件格式的出现,是为了...
  • jiaojialulu
  • jiaojialulu
  • 2017年04月05日 20:53
  • 453

【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。

方法一: 直接写吧,保证x #include int main(){ int x,y,z,t; while(~scanf("%d%d%d",&x,&y,&z)){ ...
  • zhenaodingpao
  • zhenaodingpao
  • 2013年08月21日 11:34
  • 1108

理解java中【带符号数和无符号数】以及【二进制的原码,补码,反码】(早期)

理解有符号数和无符号数负数在计算机中如何表示呢?  这一点,你可能听过两种不同的回答。  一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在...
  • qq_21292551
  • qq_21292551
  • 2014年11月18日 10:48
  • 383

面试题:6个问题

1.当参数*x==1,*y==1,*z==1时,下列不可能是函数add的返回值的(D)? int add(int *x,int *y,int *z) { *x += *x; *y += *x; *z ...
  • liuhuiyan_2014
  • liuhuiyan_2014
  • 2015年08月17日 17:47
  • 618

再次思考Z = X+Y,Z = XY的概率密度求解

再次思考Z = X+Y,Z = XY的概率密度求解@(概率论) 设方程x2−Xx+Y=0x^2-Xx+Y = 0的根相互独立,且都在(0,2)上服从均匀分布,分别求X与Y的概率密度。 分析:在前面...
  • u011240016
  • u011240016
  • 2016年11月11日 01:35
  • 4956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:尽量不要写 if(((X - Y)- Z) > 0 )这样的判断,而要写成 if((X - Y) > Z )
举报原因:
原因补充:

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