私は整数比較を行う単純なCコードを持っています。case(In)等価演算子=== '&!==' C言語のVerilogが好き
void evaluate_comparison (int addr, int expected, int got)
{
if (got == expected) tunnel_pass (addr, got);
else tunnel_fail (addr, expected, got);
}
expected
& got
実際に24ビットDSPコアに読み取る/書き込む値に対応する24ビットの値です。時々シミュレーションで
、(このC-コードをDSPコアにロードアセンブリ&にコンパイルされます)(一部addr
がDSPによってサポートされていない場合、ESP)、DSPコアはgot = 24'hxxxxxx
(未定義の24ビット値)を読み出します。この場合、上記の比較は合格しますが、私はそれを望んでいません。
===
& !==
Case Equality演算子(Verilogに似ています)がコンパイルされません。 Cでこれを行う方法はありますか?
Cには===はありません。整数の場合は、==で十分です。なぜなら、整数は表現するはずの値以外の整数ではないからです。あなたは、24ビットの値が上位8ビットにどんな迷惑メールも持たないと確信していますか?ちょうどの場合、あなたは余分な範囲チェックをすることができます。 –
Cの 'int'のビットは未知の第3の状態を持たないので、Cの' === '(大文字/小文字の等価演算子)はありません。 –
ええと、私は理論的なユースケースを考えました。もしあなたが1補完システムを持っていれば、intは+0か-0のどちらかになります。次に、それらを区別するために===演算子が必要です。しかし、私は普遍的な1補完システムが最近どのようになっているのかよく分かりません。しかし、とにかく、Cは===なので、それは問題ではありません。 –