C または C++ で比較演算子を使用せずに 2 つの整数を比較する

90 バイト

stdio を使用できる場合 、書式設定機能を使用して比較を実行してみませんか?

main(a,b){scanf("%d%d",&a,&b);snprintf(&a,2,"%d",b-a);a&=63;putchar(51-!(a-45)-!!(a-48));}

ASCII 互換のエンコーディングとリトルエンディアンであることを前提としています。

72 バイト

商はゼロに向かって丸められますが、右シフトは (実際には) 「切り捨て」られます。

main(a,b){scanf("%d%d",&a,&b);a-=b;putchar(a?a|=1,a/2-(a>>1)?60:62:61);}

65 79 バイト

負の数のもう 1 つの際立った特性は、負のモジュロを生成することです。これは、整数表現にまったく依存しません。それは私の 8 ビットの過剰な 127 トースターでも動作します!ああ、そして conio を使用できるので 、putch で 2 バイトを節約してみませんか? ?さて、TurboC のコピーさえ見つかれば...

main(a,b){scanf("%d%d",&a,&b);long long d=a;d-=b;putch(d?d|=1,d%2-1?60:62:61);}

編集 :long long を想定して大きな違いを処理します int より広いです .


ルールに何かが欠けているかもしれませんが...

81 バイト

main(a,b){scanf("%d%d",&a,&b);long long l=a;l-=b;printf("%lld%d",--l>>63,l>>63);}

出力 00 a > b の場合 、 -10 a == b の場合 、および -1-1 a < b の場合 .


64 61文字

main(a,b){scanf("%d%d",&a,&b);for(a-=b;a/2;a/=2);putchar(a);}

より小さい、等しい、またはより大きいそれぞれ -1、0、および 1 の文字値を出力します。

この実装は、b の未定義の動作に依存しています タイプ int であること および範囲外の入力の場合 INT_MIN / 2 INT_MAX / 2 へ .符号付きオーバーフローがラップアラウンドするプラットフォームでは、2 の補数 (基本的にはすべて) または符号の大きさに関係なく、有効な int の可能なペアの 25% で失敗します。 .興味深いことに (とにかく私には)、符号付きオーバーフローが飽和するプラットフォームで正しく動作します。