#define endian(x) (((x)&0xff000000>>24) || ((x)&0x00ff0000>>8) || ((x)&0x0000ff00<<8) || ((x)&0xff000000<<24))
這會有什麼bug?
只有在(x)還有人在改的時候,
問題不是我發現的,
長經驗長經驗...
百岳(1-37) | 百岳(38-48) | 中級山 | 單車 | 西藏 | 留言版
星期一, 9月 27, 2010
訂閱:
張貼留言 (Atom)
這是yehmomo,隨手寫下生活中發生的事...
「 我要去某個從來未曾去過的地方 , 我要去某個水嚐起來像酒的地方 」
「 輕量化不只是『裝備輕量化』
糧食輕量化 飲水輕量化 體重輕量化 都是輕量化的一種實踐模式 」

4 則留言:
你打錯了吧? 那錯誤的公式是下面這樣吧?
#define endian(x) (((x)&0xff000000>>24) || ((x)&0x00ff0000>>8) || ((x)&0x0000ff00<<8) || ((x)&0x000000ff<<24))
但這樣的結果只有0和1吧...XD
明明是bitwise operation, 為何要搭配"||"(logic operator)?
對,我好像打錯了(下次應該要copy and paste的),應該是
#define endian(x) (((x)&0xff000000>>24) | ((x)&0x00ff0000>>8) | ((x)&0x0000ff00<<8) | ((x)&0x000000ff<<24))
不過這個bug和你有關喔:p
真是長知識了, 沒想到會有這種潛在問題(x是兩方共用+uncacheable+volatile, 存取四次的x有可能會不同)...Orz
當初也不知道為何就是不想寫成function, 而硬是要用macro...囧
每一次的bug都是長經驗的時候,
不過有時候自己寫的code會有盲點,
看不出問題
張貼留言