[討論] 不用if做if(x < 0) x = 0; 與if(x > 25 …
(是YUV轉RGB的其中一部份)
short R;
:
:
if(R < 0)
R = 0;
上面這程式,能否不要用if呢?
我做法是這樣:
#define MIMUS_SIGN 0x8000 /* 1000 0000 0000 0000*/
#define IS_POSITIVE(XX) ( 1 - ( (XX) & MIMUS_SIGN) >>15) )
char bitand_map[2] = {0x00, 0xff};
#define BYTE_AND(XX, SIGN) ( (XX) & bitand_map[(SIGN)] )
#define MINUS_BE_ZERO ( XX) BYTE_AND_BIT( XX, IS_POSITIVE (XX) )
:
R = MINUS_BE_ZERO( R);
這程式用到了 bitand_map 這表,且在IS_POSITIVE 用了一個
bit and ,一個平移與一個減法,量有點多。
在想有沒辦法更精簡。
有人有建議的嗎?
另外,對於
if(R > 255)
R = 255;
這要不用if來優化就難了。。
(R >> 8) | (R >> 9) | (R >> 10) | (R >> 11)
| (R >> 12) | (R >> 13) | (R >> 14)
看0或是1再用上面的查表法做bit and....
這樣做太多次平移與bit or
還不如直接用if
有人有類似經驗的嗎? 謝謝指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.143.194
→
02/14 01:48, , 1F
02/14 01:48, 1F
→
02/14 01:50, , 2F
02/14 01:50, 2F
推
02/14 01:50, , 3F
02/14 01:50, 3F
→
02/14 01:50, , 4F
02/14 01:50, 4F
→
02/14 01:51, , 5F
02/14 01:51, 5F
→
02/14 01:52, , 6F
02/14 01:52, 6F
→
02/14 01:53, , 7F
02/14 01:53, 7F
→
02/14 01:54, , 8F
02/14 01:54, 8F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 01:55)
→
02/14 01:56, , 9F
02/14 01:56, 9F
→
02/14 01:58, , 10F
02/14 01:58, 10F
→
02/14 01:58, , 11F
02/14 01:58, 11F
→
02/14 01:59, , 12F
02/14 01:59, 12F
→
02/14 01:59, , 13F
02/14 01:59, 13F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:00)
→
02/14 02:00, , 14F
02/14 02:00, 14F
→
02/14 02:00, , 15F
02/14 02:00, 15F
推
02/14 02:07, , 16F
02/14 02:07, 16F
→
02/14 02:08, , 17F
02/14 02:08, 17F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:11)
→
02/14 02:10, , 18F
02/14 02:10, 18F
→
02/14 02:11, , 19F
02/14 02:11, 19F
→
02/14 02:14, , 20F
02/14 02:14, 20F
→
02/14 02:17, , 21F
02/14 02:17, 21F
→
02/14 02:20, , 22F
02/14 02:20, 22F
→
02/14 02:21, , 23F
02/14 02:21, 23F
→
02/14 02:21, , 24F
02/14 02:21, 24F
推
02/14 02:24, , 25F
02/14 02:24, 25F
→
02/14 02:25, , 26F
02/14 02:25, 26F
→
02/14 02:25, , 27F
02/14 02:25, 27F
→
02/14 02:26, , 28F
02/14 02:26, 28F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:27)
→
02/14 02:27, , 29F
02/14 02:27, 29F
推
02/14 02:27, , 30F
02/14 02:27, 30F
→
02/14 02:28, , 31F
02/14 02:28, 31F
→
02/14 02:28, , 32F
02/14 02:28, 32F
→
02/14 02:28, , 33F
02/14 02:28, 33F
→
02/14 02:29, , 34F
02/14 02:29, 34F
→
02/14 02:30, , 35F
02/14 02:30, 35F
→
02/14 02:30, , 36F
02/14 02:30, 36F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:32)
→
02/14 02:32, , 37F
02/14 02:32, 37F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:36)
→
02/14 02:37, , 38F
02/14 02:37, 38F
→
02/14 02:41, , 39F
02/14 02:41, 39F
→
02/14 02:41, , 40F
02/14 02:41, 40F
→
02/14 02:42, , 41F
02/14 02:42, 41F
→
02/14 02:43, , 42F
02/14 02:43, 42F
→
02/14 02:43, , 43F
02/14 02:43, 43F
推
02/14 02:45, , 44F
02/14 02:45, 44F
→
02/14 02:46, , 45F
02/14 02:46, 45F
→
02/14 02:47, , 46F
02/14 02:47, 46F
→
02/14 02:47, , 47F
02/14 02:47, 47F
→
02/14 02:52, , 48F
02/14 02:52, 48F
→
02/14 02:53, , 49F
02/14 02:53, 49F
→
02/14 02:54, , 50F
02/14 02:54, 50F
→
02/14 02:55, , 51F
02/14 02:55, 51F
→
02/14 02:55, , 52F
02/14 02:55, 52F
→
02/14 02:56, , 53F
02/14 02:56, 53F
※ 編輯: DrStein 來自: 58.115.143.194 (02/14 02:57)
→
02/14 02:59, , 54F
02/14 02:59, 54F
→
02/14 09:45, , 55F
02/14 09:45, 55F
→
02/14 09:49, , 56F
02/14 09:49, 56F
推
02/14 13:23, , 57F
02/14 13:23, 57F
→
02/14 13:37, , 58F
02/14 13:37, 58F
→
02/14 21:59, , 59F
02/14 21:59, 59F
→
02/14 22:00, , 60F
02/14 22:00, 60F
→
02/14 22:05, , 61F
02/14 22:05, 61F
→
02/14 22:05, , 62F
02/14 22:05, 62F
→
02/14 22:06, , 63F
02/14 22:06, 63F
→
02/14 22:07, , 64F
02/14 22:07, 64F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章