[問題] 請問一個&的用法

看板C_and_CPP作者 ( )時間15年前 (2009/04/03 12:23), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/1
int convert_num(int num) { /* convert a 16-bit number into a 32-bit Linux integer */ if (num & (1<<15) ) { num -= (1<<16); } return num; } 這是一個可以把int 的32bits只擷取後面16bits的function 我想問的是if後面的判斷式 那個寫法的意思 我想他的意思應該是num的第15個bit的值吧 我測試的結果 這種寫法 傳出來的值就是第n個bit的值(0or1)*2^n 可是為甚麼能這樣寫? 可以請高手指導一下嗎? 這個&在這邊的意義跟reference的address有什麼不同嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.252.170

04/03 12:29, , 1F
這邊的&的是bit-wise的and
04/03 12:29, 1F
可是我用下面這個測試 int c=5; printf("%d",(c&(1<<2))); 印出來結果是4耶 如果只是bit-wise的結果 不是應該是0或1嗎 怎麼還會乘上2的n次方? ※ 編輯: lavanil 來自: 140.112.252.170 (04/03 12:39)

04/03 12:38, , 2F
不是負的 是非0
04/03 12:38, 2F

04/03 13:00, , 3F
1<<2 = 0100b , 5&0100b = 4 沒錯阿
04/03 13:00, 3F

04/03 13:06, , 4F
您應該查一下bitwise operator << 和 >> 的用法/運作:)
04/03 13:06, 4F

04/03 13:08, , 5F
左右shift是 (00110110)b 所有bit做shift, 想像拉皮帶吧
04/03 13:08, 5F

04/03 13:08, , 6F
至於正負數造成的>> bit extend問題可以順便一次學清楚.
04/03 13:08, 6F

04/03 13:10, , 7F
& (00000100)b 寫成直式運算會好懂些:)
04/03 13:10, 7F

04/03 13:10, , 8F
糟~~請把13:08的第二行往後移再看XD
04/03 13:10, 8F

04/03 13:14, , 9F
懂了 感謝各位
04/03 13:14, 9F
文章代碼(AID): #19rOyxA4 (C_and_CPP)