无法输入while语句

可能重复:
未签名和签名的比较
unsigned int和signed char比较

当我尝试输入这个while语句时,我有一个奇怪的行为:

unsigned u = 0; int i = -2; while(i < u) { // Do something i++; } 

但它永远不会进入,即使我设置了一个断点i = -2u = 0 。 我究竟做错了什么? 我怎么能解决这个问题?

这是因为ANSI C标准定义了只要在限定( unsigned int u )和非限定类型( int i )之间进行比较,非限定类型就会被提升为相同类型的类型(因此总是int ),但也inheritance了其他数量的限定符(即它变为unsigned )。

当你的int (其值等于-2 )因为unsigned第一个字节经历了这个转换: 0000 0010 -> 1111 1110 。 你的int现在是一个非常大的正数,肯定比你的unsigned int

有一个解决方案:施放signed

 while(i < (signed) u) { // Do something i++; } 

顺便说一句,可能你的编译器应该给你一个警告。

你正在比较有符号和无符号整数,你的问题从那里开始……
不要这样做,它应该工作得很好。