私はこの質問に出会った。このCコードの出力が「ノー」なのはなぜですか?
#include <stdio.h>
int main(void) {
// your code goes here
unsigned int i = 23;
signed char c = -23;
if (i > c)
printf("yes");
else
printf("no");
return 0;
}
私はこのコードの出力はno
でいる理由を理解することができません。
比較演算子がint
とchar
の間で比較されたときの比較演算子の理解方法を教えてもらえますか?
についての記事を読む[2の補数](https://en.wikipedia.org/wiki/Two%27s_complement)。と[Cの暗黙的な変換について](http://en.cppreference。com/w/c/language/conversion)(特に[算術変換について](http://en.cppreference.com/w/c/language/conversion#Usual_arithmetic_conversions)) –
正規のソースは[C標準](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)(N1570ドラフト)です。 *整数宣伝*( 'signed char'値を' int'に変換する)については6.3.1.1を、6.3.1.8通常の算術変換*(両方のオペランドを共通型 'unsigned int' 、比較を実行する前に)。 –