0

次の構造を int64 に合わせる必要があります。

day  9 bit (0 to 372)
year 8 bit (2266-2010 = 256 y)
seconds  17 bit (24*60*60=86400 s)
hostname 12 bit (2^12=4096)
random 18 bit (2^18=262144)

このような構造を int64 に適合させるにはどうすればよいですか? すべてのアイテムは数値であり、指定されたビットサイズです

4

3 に答える 3

7

通常、1 つの int64 フィールドと、そのフィールドの関連ビットのみにアクセスする複数のプロパティを含む構造体を宣言します。

以下のようなので:

struct MyStruct
{
    int64 _data

    public short Day
    {
        get { return (short)(_data >> 57); }
    }
}
于 2010-08-15T11:03:24.453 に答える
7

適切なシフトと一緒にビット単位またはコンポーネント。

int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.

それらをシフトしてand-ingすることにより、物事を取り出します。

random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
于 2010-08-15T11:03:29.290 に答える
4

この C++ と C# にタグを付けましたが、これら 2 つのオプションは大きく異なります。

C++ では、ビットフィールドを使用できます。

// from MSDN
struct Date 
{
   unsigned nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned nMonthDay : 6;    // 0..31  (6 bits)
   unsigned nMonth    : 5;    // 0..12  (5 bits)
   unsigned nYear     : 8;    // 0..100 (8 bits)
};

C#では、他の回答と同様に、自分でビットシフトする必要があります。

于 2010-08-15T11:30:26.610 に答える