質問

最近、私はをhref="https://stackoverflow.com/questions/700410/subtraction-without-minus-sign/700487#700487">。私は言語仕様を読んでいないかもしれないので(それは私のせいです、私が知っている)。

C99標準では、コンパイラによって使用されるべき負の数の表現言っていません。私は常に負の数を格納するための唯一の正しい方法は、(ほとんどの場合)2の補数であると考えます。

だからここに私の質問です:あなたは、デフォルトの1の補数またはサインマグニチュード表現で実装するすべての現代のコンパイラを知っていますか?我々はいくつかのコンパイラフラグで、デフォルトの表現を変更することはできますか?

使用されている表現を決定する最も簡単な方法は何ですか?

そして、何C ++標準についてはどうですか?

役に立ちましたか?

解決

私はそれがそんなにコンパイラが使用するのではなく、根本的なマシンが使用するものを表現するものの表現の問題ではないと思います。それはノー利益のためのオーバーヘッドの負荷を導入するため、コンパイラは、ターゲットマシンでサポートされていない表現を選ぶことは非常に愚かなことでしょう。

IPプロトコルスイートの使用中のいくつかのチェックサムフィールドの1の補数、ので、おそらく専用の「ネットワークアクセラレータ」型CPU:sがそれを実装する

他のヒント

2の補数の表現ははるかに最も一般的であるが、

、そうではありません一つだけ(一部のを参照してください)。 CおよびC ++標準化委員会は、非ネイティブ表現をエミュレートするために、非2の補数のマシンを必要としたくありませんでした。従って、特定の負の整数フォーマットを必要++もCいないC

この署名タイプのビット演算の未定義の動作につながるます。

1の補数演算を実装 UNISYS 2200シリーズには、まだありますつかいます。あなたは、

以下の質問にそれについての詳細を読むことができます

標準委員会がを気にエキゾチックなアーキテクチャ

は、Cのいずれかの非2の補数の実装はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top