错误、漏洞、问题 - 页 1127

 
Fleder:

这个重排的作用是什么?t低于ULONG_MAX-1,并保持不变。

我引用了这个错误的例子 - 它是与int的比较,而这里是与long的比较

for(int t=0
void OnStart()
{
  long t=0;
 

uint 和ulong类型 比int和long有更高的优先级。

通过二元操作合并时的转变

在比较表达式中使用转换到更高的类型是合乎逻辑的。

但这似乎并不适用于被检查的循环表达式。

 
ULONG_MAX 本身没有类型,与int相比,它是int,与long相比,它是long。
 
A100:
ULONG_MAX 本身没有类型
这个号码的类型是什么:18446744073709551615?
 
A100:
ULONG_MAX 本身没有类型,与int相比,它是int,与long相比,它是long。

与乌龙相比呢?

void OnStart()
{
  ulong n=18446744073709551615;
  Print(ULONG_MAX==n);   //true
}
 
A100:
ULONG_MAX 本身没有类型,与int相比,它是int,与long相比,它是long。

能否反过来呢?

int和long相对于ulong将是ulong?

 
Fleder:

能否反过来呢?

int和long相对于ulong会是ulong吗?

当比较有符号和无符号时,会给出一个警告,除非其中一个明确转换为另一个,否则可能会是一个位数的比较
 

循环似乎确实在转换为有符号的类型。

void OnStart()
{
  ulong n=0;
  for(ulong i=0;i<ULONG_MAX;i++) {n++;}
  Print("n = ",n);          //0
  Print((long)ULONG_MAX);   //-1
}

并且不进行迭代。

 
A100:
当比较有符号和无符号时,会发出警告,除非明确地将一个转换为另一个,否则可能会有一个位数的比较
void OnStart()
{
  long l=13;
  ulong u=13;
  bool compare=(l==u);           //предупреждения нет
  Print("compare = ",compare);   //compare = true
}

 
bool f( int i, uint j )
{
        return ( i < j );
}
但事实就是如此。