[問題] 位移運算子的疑問

看板C_and_CPP作者 (阿慶)時間15年前 (2010/12/07 19:52), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/2 (看更多)
遇到的問題(Question):比如說一般的unsigned 所定義的變數是可以隨便用>>,<< 來做除或乘的動作,但變成signed定義時,是不是就不能這樣做了?是會因此改變sign bit 的關係?假如程式是這樣寫: signed long temp = 0x80000000; signed long Out; Out = (temp >> 16); <--A Out = (temp/65536); <--B 請問一下,是B對還是A對?如果B才是正確的,是否有其他方法可以在負數的情況下,使用 >>,<<來進行除跟乘的動作?(主要是因為用位移的比較快速) 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.165.217

12/07 20:22, , 1F
我怎麼記得signed可以正常shift
12/07 20:22, 1F

12/07 21:26, , 2F
12/07 21:26, 2F

12/07 21:27, , 3F
的格式,隨意左右移會把前面的符號位元改變
12/07 21:27, 3F

12/08 00:24, , 4F
必須先用2補數運算將負數變回正數後在SHIFT...
12/08 00:24, 4F

12/08 00:25, , 5F
再2補數運算轉回來!!!
12/08 00:25, 5F
文章代碼(AID): #1C_Y00B6 (C_and_CPP)
文章代碼(AID): #1C_Y00B6 (C_and_CPP)