gpt4 book ai didi

.NET - int32 平台的 MSB 是否不可知?

转载 作者:行者123 更新时间:2023-12-01 11:06:56 27 4
gpt4 key购买 nike

我有以下代码用于从非负整数获取 MSB(最高有效位),更具体地说是 Int32:

private static readonly int[] powersOf2 = new int[]
{
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,
32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304,
8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912,
1073741824
};

public static int GetMsb(int value)
{
for (int k = powersOf2.Length - 1; k >= 0; k--)
{
var bit = (value & powersOf2[k]) != 0;
if (bit)
return (k + 1);
}
return 0;
}

同样:鉴于该值不是负数。

我的问题是:
.NET 框架是否保证此代码能够在每个平台上正常运行:x86/Windows/Linux/Sun/64 位?

.NET 中的 Int32 表示(包括 Endianness 和位/字节顺序)是否与平台无关?

提前致谢!
顺便说一句,如果这有点重复 - 请尽快评论。谢谢!

最佳答案

只要您将其视为int ,是的,它与平台无关。这包括所有算术和按位( <<>> 等)运算。操作码始终确保它按照您的预期进行。

但是!如果您窥视幕后,它可能很重要;例如 BitConverter.GetBytes(int)BitConverter.ToInt32关心字节顺序。您可以使用 BitConverter.IsLittleEndian 进行检查;通常是 true在“常规”.NET 上,但可能是 false可能在 IA64 上,或者在某些架构上的 XNA 或 Mono 上。

同样的逻辑适用于强制(例如)byte* 之间的任何不安全代码。和 int* ,或通过 [StructLayout] 构建的任何联合 .

但在常规代码中,您应该没问题。

关于.NET - int32 平台的 MSB 是否不可知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524888/

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