当前位置:  开发笔记 > 编程语言 > 正文

比较int与long和其他

如何解决《比较int与long和其他》经验,为你挑选了1个好方法。

我想知道这样的事情:

int a = ...;
long b = ...;

if (a < b)
     doSomethings();

总是有效(除了未签名)

我只是测试了几个值,但我想确定.我认为a在比较中投入很长时间,其他类型呢?



1> chux - Reins..:

int/long比较总是有效.这两个操作数转换为通用类型,在这种情况下long,所有操作数都int可以转换为long没有问题.

int ii = ...;
long ll = ...;
if (ii < ll)
   doSomethings();

unsigned/long比较始终,如果工作long范围超出unsigned.如果unsigned范围为[0...65535]long[-2G...2G-1],则操作数转换为long和所有unsigned可被转化为long,没有任何问题.

unsigned uu16 = ...;
long ll32 = ...;
if (uu16 < ll32)
   doSomethings();

unsigned/longlong范围不超过时比较有问题unsigned.如果unsigned范围为[0...4G-1]long[-2G...2G-1],则操作数转换为long,一个常见的类型不涵盖范围和随之发生下列问题.

unsigned uu32 = ...;
long ll32 = ...;

// problems
if (uu32 < ll32)  
   doSomethings();

// corrected solution
if (uu32 <= LONG_MAX && uu32 < ll32)  
   doSomethings();

// wrong solution
if (ll32 < 0 || uu32 < ll32)  
   doSomethings();

如果type long long包含所有范围unsigned,则代码可以使用至少与long longwidth 进行比较.

unsigned uu;
long ll;
#if LONG_MAX >= UINT_MAX
  if (uu < ll)  
#if LLONG_MAX >= UINT_MAX
  if (uu < ll*1LL)  
#else 
  if (uu32 <= LONG_MAX && uu32 < ll32)  
  // if (ll < 0 || uu < ll)  
#endif

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有