gpt4 book ai didi

c# - 如何使用移位运算符将字节舍入为 0 或 255

转载 作者:行者123 更新时间:2023-11-30 13:16:47 25 4
gpt4 key购买 nike

为了在我的 C# 项目中对位图图像中的像素进行重新着色,我想将我的 RGB 值向上舍入为 255 或向下舍入为 0;

每个值都是一个字节。

现在我正在做以下事情:

(byte)(Pixels[i] < 128 ? 0 : 255);

我相信这可以更快地实现,并且无需使用按位运算进行类型转换。我该怎么做呢?

最佳答案

   (byte)(Pixels[i] < 128 ? 0 : 255)

是的,如果位图包含太多随机数据,这往往会由于分支预测不佳而表现不佳。抖动不会为这样的语句生成条件移动。

您可以使用一个技巧,右移保留带符号整数值的符号位。这使得这段代码有效:

   (byte)((sbyte)Pixels[i] >> 7)

生成没有分支的代码:

000000a7  movsx       eax,byte ptr [edx+eax+8]  ; Pixels[i], sign extended to 32-bits
000000ac sar eax,7 ; >> operator
000000af and eax,0FFh ; (byte) cast

关于c# - 如何使用移位运算符将字节舍入为 0 或 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342677/

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