[問題] 面試考題 程式最佳化

看板C_and_CPP作者時間13年前 (2011/06/13 23:10), 編輯推噓9(9011)
留言20則, 9人參與, 最新討論串1/10 (看更多)
hi 以下是我今天面試所遇到的考題, 來這裡請教大家 a,b是 unsigned int 最佳化以下兩段程式碼 1 跟 2 1.if ( (a/24) > b ) return 1; 2.a=(b/1024)*10; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.35.138 ※ 編輯: apey 來自: 220.133.35.138 (06/13 23:12)

06/13 23:15, , 1F
很簡單
06/13 23:15, 1F

06/13 23:15, , 2F
全部用 <<, >> 替代
06/13 23:15, 2F

06/13 23:27, , 3F
(a << 5) - (a << 3) (b << 3) + (b << 1)
06/13 23:27, 3F

06/13 23:36, , 4F
if((a>>3)>((b<<1)+b))return 1;
06/13 23:36, 4F

06/13 23:40, , 5F
a=(b>>7)+(b>>9)
06/13 23:40, 5F

06/13 23:42, , 6F
四樓的應該不行.....因為a是unsigned 不可隨便換@@
06/13 23:42, 6F

06/13 23:44, , 7F
unsigned int
06/13 23:44, 7F

06/13 23:45, , 8F
a=((b^(b&1023))>>7) + ((b^(b&1023))>>9)
06/13 23:45, 8F

06/14 12:10, , 9F
我好奇是哪一家公司出的題目
06/14 12:10, 9F

06/14 12:17, , 10F
如果不考慮前後文, 1或許可改成 return (a > 24*b);
06/14 12:17, 10F

06/14 13:50, , 11F
1.if ( (a>>4) > (b<<3) ) return 1;
06/14 13:50, 11F

06/14 19:11, , 12F
@l大:假如用乘法b有可能會溢出
06/14 19:11, 12F

06/14 22:11, , 13F
<囧
06/14 22:11, 13F

06/15 11:16, , 14F
安霸 我也考過...
06/15 11:16, 14F

06/17 17:50, , 15F
不了解 << , >>在這邊代表什麼...
06/17 17:50, 15F

06/17 19:46, , 16F
位移呀
06/17 19:46, 16F

06/18 15:52, , 17F
位移,了解 但不了解(a<<5)-(a<<3) 跟a/24的關係@@
06/18 15:52, 17F

06/18 21:29, , 18F
寫錯字母...應該是 (b << 5) - (b << 3) 算出 b = b*24;
06/18 21:29, 18F

06/18 21:29, , 19F
再做 a,b 的大小比較
06/18 21:29, 19F

06/18 22:53, , 20F
哈 終於了解了
06/18 22:53, 20F
文章代碼(AID): #1DzYY3JJ (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 10 篇):
文章代碼(AID): #1DzYY3JJ (C_and_CPP)