- 1
- 2
- 3
- 4
- 5
- 6
__forceinline BYTE ClampShortToByte(signed short value)
{
value>255?value=255:( value<0?value=0:NULL );
return (BYTE)value;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+176
__forceinline BYTE ClampShortToByte(signed short value)
{
value>255?value=255:( value<0?value=0:NULL );
return (BYTE)value;
}
guest 18.02.2011 14:42 # 0
MS VS детектед.
guest 18.02.2011 14:43 # +1
На переменных сэкономили...
Kirinyale 18.02.2011 14:49 # +2
if (value > 255) value = 255;
else if (value < 0) value = 0;
Хотя, кто-то мне как-то говорил, что вот такие извращения с тернарным оператором иногда компилятся оптимальнее, чем простые и понятные ифы. Может, ещё с инлайном будут грабли. Не знаю, не проверял. Но выглядит адско. Уж лучше бы асм вставили, если оптимальности захотелось.
guest 18.02.2011 14:53 # 0
Им бы алгоритм поменять.
TarasB 18.02.2011 14:58 # +4
value :>= 0;
value :<= 255;
Также пригодился бы тернарный оператор :[]..
value :[] 0 .. 255;
guest 18.02.2011 15:22 # −1
istem 18.02.2011 23:38 # +2
--
не удержался...
guest 19.02.2011 00:48 # 0
bugmenot 19.02.2011 01:03 # 0
istem 19.02.2011 01:16 # +1
guest 19.02.2011 01:18 # −1
Lure Of Chaos 19.02.2011 17:23 # +1
absolut 18.02.2011 15:17 # +3
Lure Of Chaos 18.02.2011 20:41 # 0
koodeer 18.02.2011 21:39 # 0
guest 18.02.2011 22:36 # +1
ossa 18.02.2011 23:24 # +2
inline uint8_t ClampShortToByte(int16_t value)
{
return (uint8_t)(((value >> 8) & 0x7F) ? 0xFF : ((value & 0xFF))) * ((~(value >> 15) & 1));
}
gb12335 22.02.2011 04:43 # 0
лучше так (вспомним, что a=b?c:d на самом деле дает или a=c, или a=d):
inline BYTE ClampShortToByte(signed short value)
{
return (BYTE)(value>255?255:(value<0?0:value));
}
absolut 22.02.2011 07:45 # 0
gb12335 22.02.2011 14:12 # −1
Как минимум не имеет смысла мучать локальную стековую переменную value.
В моем случае ее можно даже const сделать...
inline BYTE ClampShortToByte(const signed short value)
absolut 22.02.2011 15:14 # −1
Kirinyale 23.02.2011 16:48 # 0
inline uint8 clampToUInt8(int value)
{
return (((((value << 23) >> 31) | value) & 0xFF) & ~(value >> 31)) & 0xFF;
}
gegMOPO4 26.02.2011 11:51 # +1
Kirinyale 28.02.2011 12:41 # 0
TarasB 28.02.2011 12:55 # 0
burjui 02.03.2011 17:37 # 0
inline BYTE ClampShortToByte(short value)
{
return max((short)0, min(value, (short)255));
}