gpt4 book ai didi

.net - 如果我有三个独立的值都可以放入 32 位,那么使用 uint 来存储它们是否有意义?

转载 作者:行者123 更新时间:2023-12-04 18:52:49 24 4
gpt4 key购买 nike

我的意思是,假设我有一个 struct表示一些数据,它看起来像这样:

struct LilStruct
{
public readonly short A;
public readonly byte B;
public readonly byte C;

public LilStruct(short a, byte b, byte c)
{
A = a;
B = b;
C = c;
}
}

一个 short和两个 byte值都可以放入 32 位。我想知道的是(出于对齐目的、性能等目的),将这些数据存储为以下格式是否真的有意义:
struct LilStruct
{
private readonly uint _value;

public LilStruct(short a, byte b, byte c)
{
_value = ((uint)a << 16) | ((uint)b << 8) | (uint)c;
}

public int A
{
get { return (int)(_value >> 16); }
}

public int B
{
get { return (int)(_value >> 8) & 0x000000FF; }
}

public int C
{
get { return (int)(_value & 0x000000FF); }
}
}

这是没有意义的吗?有什么好处/缺点?

最佳答案

在 .NET 中,当您打算使用 struct 时无论如何,你也可以用 StructLayoutAttribute 装饰结构体像这样:

[StructLayout(LayoutKind.Sequential, Pack=1)]
struct LilStruct
{
public readonly short A;
public readonly byte B;
public readonly byte C;

public LilStruct(short a, byte b, byte c)
{
A = a;
B = b;
C = c;
}
}

这将导致字段按顺序排列,例如领域 B将从偏移量 16 开始。

Pack 的值为 1表示字段在 byte 处对齐边界。

关于.net - 如果我有三个独立的值都可以放入 32 位,那么使用 uint 来存储它们是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com