→ james732:第一種寫法,改成unsigned int i, mask = .... 就好了 01/03 21:08
→ loveme00835:不是很清楚你想作什麼功能 01/03 21:08
→ x000032001:你想寫的程式是10轉2 可是內容打2轉10? 01/03 21:09
→ james732:第二種寫法,00001000在最前面是因為little endian 01/03 21:11
→ james732:而且第二種寫法,每跑完一個byte就要重設mask=0x80; 01/03 21:13
→ james732:不然到第二個byte之後,mask就一直是0了 01/03 21:13
→ jimmyoic:2轉10 不好意思我敘述很爛= = 01/03 21:15
→ jimmyoic:阿不對 10轉2拉 = =" 01/03 21:18
→ jimmyoic:第一種寫法我改成unsigned int i 還是有一樣的問題@@ 01/03 21:23
→ james732:重點是 mask 必須是 unsigned 01/03 21:23
→ jimmyoic:mask改成unsigned以後就可以正確顯示256以內的2進位了 01/03 21:25
→ jimmyoic:不過一到256又會歸0 257又從00000001開始= = 01/03 21:26
→ jimmyoic:為什麼mask一定要是unsigned?? 01/03 21:26
→ tropical72:!!樓上j大竟猜得出那個value是什麼,我剛還一直在猜說 01/03 21:38
→ james732:不過另一個u.intvalue;我就猜不透了 XD 01/03 21:39
→ tropical72:if(mask & value) ----> 莫名多出來的 value... 01/03 21:39
→ jimmyoic:阿對不起 = = 因為我原本是在union裡宣告的 intvalue 01/03 21:47
→ jimmyoic:完全沒注意到忘記改= = 01/03 21:50
→ jimmyoic:謝謝樓上熱心回答! 雖然還是不知道為什麼要加unsigned 01/03 21:53
推 VictorTom:去查一下 >> 這個shift operator使用時的注意事項.... 01/03 21:57
→ VictorTom:簡單的說, 有號數的MSB(或者視為sign bit)是1時, >> 的 01/03 21:58
→ VictorTom:結果, 與無號數(unsigned)的MSB為1時>>的結果並不同. 01/03 21:59
→ VictorTom:MSB: 最高位的意思. 或者你會用union的話, 試試把一個 01/03 22:00
→ VictorTom:int與一個unsigned int union在一起, 然後試試看假設給 01/03 22:01
→ VictorTom:uint那個初值為0x88FF0000, 之後分別觀察用int那個去>> 01/03 22:02
→ VictorTom:的結果, 與用uint那個element去>>的結果有何不同:) 01/03 22:02
→ tropical72:Primer 4e p155,運算元若為signed,用shift取決於編譯器 01/03 22:26
推 VictorTom:(驚) 糟糕, 小弟一直以為signed的case是補MSB....Orz 01/03 22:29
→ tropical72:所以保險的方式還是自己去處理 signed bit. 01/03 22:37
推 LPH66:我也記得是用 signed shift... 01/03 23:22
→ LPH66:大概是為了只有 logical shift 的環境吧 (我猜) 01/03 23:23
→ loveme00835: @_@ 01/03 23:27
推 LPH66:啊我知道為什麼了 因為標準沒規定負數的表示法得是二補數.. 01/05 00:36
推 tropical72:推樓上 L 大.. 01/05 00:40
推 tomap41017:LPH整個很威啊!!學長好XD 01/05 01:50
推 VictorTom:糟糕~~小弟我完全把二補數當作必然了....Orz 01/05 23:49