[問題] 詢問C sign extension的方法
請問各位大大我有一個32bits資料
存在站存器 uint32 DATA 中
然後我要將DATA中的資料SHIFT右移16bit
所以我程式就打
result=(DATA)>>16;
但是我的result出來要如何讓前面補的16bit有"sign extension的效果"
EX: 若DATA=1000 1000 1000 1000 1000 1000 1000 1000 (32bits)
^
sign bit
那我 >>16 SHIFT
我希望結果我要的是
result=1111 1111 1111 1111 1000 1000 1000 1000
___________________ ^
sign extension sign bit(shift後)
thx by dczhang
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.149.173
推
08/27 18:01, , 1F
08/27 18:01, 1F
→
08/27 18:06, , 2F
08/27 18:06, 2F
推
08/27 18:09, , 3F
08/27 18:09, 3F
→
08/27 18:10, , 4F
08/27 18:10, 4F
→
08/27 18:11, , 5F
08/27 18:11, 5F
→
08/27 18:15, , 6F
08/27 18:15, 6F
推
08/27 18:17, , 7F
08/27 18:17, 7F
→
08/27 18:17, , 8F
08/27 18:17, 8F
→
08/27 18:29, , 9F
08/27 18:29, 9F
→
08/27 18:31, , 10F
08/27 18:31, 10F
推
08/27 18:36, , 11F
08/27 18:36, 11F
謝謝各物大大指教我改好了,給你們看一下這樣是否可以
e = (((data[i+40]>>3)*coeff[20])&0x3ffff000); //e的資料為第29~12 bits共18bits
//以下作判斷>>12是否要sign extension
if ((e & 20000000) == 0x20000000){ //CHECK 第29bit是否為1
tmp32R[i+40]= 0xFFFC0000|(e>>12);} //若有就做1的sign extension
else
tmp32R[i+40]= e>>12; //結果放在 tmp32R[i+40]
※ 編輯: dczhang 來自: 140.113.149.173 (08/27 18:53)
推
08/27 20:38, , 12F
08/27 20:38, 12F
推
08/28 00:26, , 13F
08/28 00:26, 13F
→
08/28 00:43, , 14F
08/28 00:43, 14F
→
08/28 12:56, , 15F
08/28 12:56, 15F