0

月の日の列挙型にフラグを付けたいと思います。

現在、月または曜日の多くの例を見つけましたが、それらは列挙型に基づいており、16 進形式を使用して項目の値を指定しています。

ただし、31 日間 + 最終日のオプションのショートは小さすぎると思います。int で十分だと思いますが、これを実装してビット単位の操作を可能にする方法を考え出すのに苦労しています。

誰でも助けることができますか?

4

2 に答える 2

0

列挙型は必要ありません。4 バイトの整数を使用して値を格納し、整数として表された日付と比較すると便利です。

以下のコード (C# を使用) では、31 日目 (左端のビット)、3 および 1 が選択済みとしてマークされています。特別なフラグに使用できる最下位ビットは使用していません。以下のコードをチェックして、日が選択されているかどうかを読み取る方法を確認できます。

Int32 selected = Convert.ToInt32("10000000000000000000000000001010", 2);

for (int day = 1; day <= 31; day++)
{
    int dayMask = 1 << day;
    bool isSelected = (selected & dayMask) != 0;
}

曜日を選択するには、次のコードを使用できます。

Int32 toSelect = 0;

// select day 1
toSelect = toSelect | (1 << 1);

// select day 3
toSelect = toSelect | (1 << 3);

// select day 31
toSelect = toSelect | (1 << 31);
于 2013-10-02T00:48:05.257 に答える