1

私はユニットフィールドを持っていますevents:

events:uint;

の値はevents、設定されたビットの量ほど興味深いものではありません。の設定ビット量の範囲を制限したいと思いますevents。それを行う方法はありますか?ご協力ありがとうございました。

4

3 に答える 3

2

もっと簡単な方法があるかもしれませんが、ビット スライスを使用して uint のリストを変数のビットと等しくなるように制約し、 を使用sumしてそれらの量を制約することができます。

次の例は、必要なことを行います (簡潔にするために 4 ビット変数に制限されています)。

<'
extend sys {
    events : uint(bits:4);
    b: list of uint(bits:1);
    keep b.size() == 4;

    keep b[0] == events[0:0];
    keep b[1] == events[1:1];
    keep b[2] == events[2:2];
    keep b[3] == events[3:3];

    keep (b.sum(it) == 2);
};
'>

すべての制約を記述するのはおそらく少し見苦しいですが、define as computedマクロを使用して簡単に行うことができます。

于 2014-11-27T13:04:53.070 に答える