将unsigned char与负数进行比较

时间:2016-04-21 12:58:40

标签: c

我想知道ar [i]中第9行会发生什么!= -1。结果是循环没有停止,但我不确定原因。

  4 int main()
  5 {
  6     unsigned char ar[] = {1, 2, 3, 4, 5, -1};
  7     int i;
  8
  9     for (i = 0; ar[i] != -1; i++)
 10     {
 11         printf("ar: %u\n", ar[i] );
 12     }
 13     printf("out: %u\n", ar[i] );
 14
 15     return 0;
 16
 17 }

谢谢,

1 个答案:

答案 0 :(得分:8)

unsigned char ar[] = {1, 2, 3, 4, 5, -1};ar[5]初始化为(unsigned char)-1,即255,因为无符号算术通过环绕来工作。

然后你做ar[5] != -1整数促销将左侧从unsigned char移至int而不更改值。这使得比较255 != -1,这是真的,因此循环继续。

一种解决方案是针对(unsigned char)-1测试循环条件。或者,您可以使用数组维度而不是sentinel值。