首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将无符号字符与负数进行比较

将无符号字符与负数进行比较
EN

Stack Overflow用户
提问于 2016-04-21 12:58:39
回答 1查看 764关注 0票数 1

我想知道在ari != -1中第9行发生了什么。结果是循环没有停止,但我不知道为什么。

代码语言:javascript
复制
  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 }

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-21 13:05:34

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

然后你做ar[5] != -1。整数提升从unsigned charint的左手边,而不改变值。这使得比较255 != -1,这是正确的,因此循环继续。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36770376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档