gpt4 book ai didi

c# - 奇怪的 Queue.Enqueue(T item) 代码

转载 作者:可可西里 更新时间:2023-11-01 08:09:46 26 4
gpt4 key购买 nike

在使用 ILSpy 进行反射时,我在 Queue<T>.Enqueue(T item) 中找到了这行代码-方法:

if (this._size == this._array.Length)
{
int num = (int)((long)this._array.Length * 200L / 100L);
if (num < this._array.Length + 4)
{
num = this._array.Length + 4;
}
this.SetCapacity(num);
}

我只是想知道为什么有人会这样做?我认为这是某种整数溢出检查,但为什么要先乘以 200L然后除以 100L

这可能是早期编译器的问题吗?

最佳答案

通常先乘以再除以 100 是百分比计算 - 也许在原始代码中有一些 const XxxPercentage = 200 或类似的东西。编译器似乎没有将 * 200/100 优化为 * 2

此代码将容量设置为其大小的两倍 - 但如果其大小的两倍小于原始大小 + 4,请改用它。

它被转换为 long 的原因可能是因为如果你将一个整数乘以“200%”它会溢出。

关于c# - 奇怪的 Queue<T>.Enqueue(T item) 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838017/

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