不确定是否可能,但是否有一种自动的方式,使用mod或类似的东西,来自动纠正错误输入值?例如:
If r>255, then set r=255 and
if r<0, then set r=0
所以基本上我的问题是,有没有一个巧妙的数学方法来设置这个,而不是使用。
if(r>255)
r=255;
if(r<0)
r=0;
不确定是否可能,但是否有一种自动的方式,使用mod或类似的东西,来自动纠正错误输入值?例如:
If r>255, then set r=255 and
if r<0, then set r=0
if(r>255)
r=255;
if(r<0)
r=0;
r = std:max(0, std::min(r, 255));
f(x) = (510*(1 + Sign[-255 + x]) + x*(1 + Sign[255 - x])*(1 + Sign[x]))/4
你能做类似这样的事情吗 --
R = MIN(r, 255);
R = MAX(R, 0);
R
总是会是零或负数。 - ClosureCowboy根据您的硬件和可能的解释器处理整数的方式,您可以这样做:
假设无符号整数为16位(以保持掩码短):
r = r & 0000000011111111;
r = min(r, 0);
。我在处理图像时遇到了类似的问题。对于一些特殊值(比如0和255),你可以使用这种不可移植的方法:
static inline int trim_8bit(unsigned i){
return 0xff & ((i | -!!(i & ~0xff))) + (i >> 31);
// where "0xff &" can be omitted if you return unsigned char
};
static inline unsigned char trim_8bit_v2(unsigned i){
if (__builtin_expect(i & ~0xFF, 0)) // it's for gcc, use __assume for MSVC
return (i >> 31) - 1;
return i;
};
为确保哪个最快,测量。