Ste*_*ger 0 c# c++ int64 data-structures
我需要将以下结构放入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)
Run Code Online (Sandbox Code Playgroud)
如何使这样的结构适合int64?所有项目都是数字的,具有指定的位大小
通常,您将声明一个带有一个int64字段的结构,以及多个只访问该字段相关位的属性.
所以喜欢:
struct MyStruct
{
int64 _data
public short Day
{
get { return (short)(_data >> 57); }
}
}
Run Code Online (Sandbox Code Playgroud)
只是按位 - 或组件与适当的班次一起.
int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.
Run Code Online (Sandbox Code Playgroud)
通过移动和分析来解决问题.
random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
Run Code Online (Sandbox Code Playgroud)