[問題] 此位移的作用

看板C_and_CPP (C/C++)作者 (語言轉換真麻煩)時間16年前 (2009/05/26 09:10), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/1
我看到一份文獻上的寫法是 (原32位元我改16位元假設) PP = 65535 /*2^16-1*/ define MUL5(x) (((x)>>11) + ((x)<<5&PP)); 假設 一組數 x = 0000000101100011 = 876 如果我用MUL5(x) 那就是 0010110001100000 (x)<<5 + 0000000000000000 (x)>>11 = 0010110001100000 = 11360 這樣..的意義是什麼呢? 16位元乘法? =======================原始程式================================== unsigned long MOPD(unsigned long z) {return (((z)&PP)+((z)>>31));} #define PP 2147483647 #define KK 102 #define HH 1/(2.0*PP) #define MUL20(x) (((x)>>11) + ((x)<<20&PP)); #define MUL9(x) (((x)>>22) + ((x)<< 9&PP)); double u_dx1d() { int II0 = II; unsigned long X; if(++II >= KK) II = 0; X = MODP(MUL20(XX[II]) + MUL9(XX[II])); XX[II] = MOD(X + XX[II0]); return ((double) XX[II] /PP) + HH; } 其中,XX[i]是一個任意數值 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.128.31

05/26 10:29, , 1F
rotate
05/26 10:29, 1F

05/26 10:30, , 2F
以你的 16 bit 的例子, 是把前五 bits 移到最後面
05/26 10:30, 2F

05/26 10:47, , 3F
那若用相同的道理來位移,那MUL10,就是把前方10位元移到
05/26 10:47, 3F

05/26 10:47, , 4F
最後方,這樣嘛?
05/26 10:47, 4F

05/26 11:45, , 5F
I think so, 寫個程式試試吧, 它 & 2147483647 會去掉首位
05/26 11:45, 5F

05/26 12:01, , 6F
嗯嗯!!謝謝!
05/26 12:01, 6F
文章代碼(AID): #1A6q5s9N (C_and_CPP)
文章代碼(AID): #1A6q5s9N (C_and_CPP)