[討論] 雙班 hw 9-2

看板b00902HW作者 (槍不能這樣打)時間14年前 (2011/12/05 21:38), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/2 (看更多)
給一些不會做circular shift 的同學參考,當然這不是唯一解 假設一個數字(number),經過運算之後會得到一個數值(result) 你現在的任務就是要把題目給的result 轉換成原本的number。 int number; int number_mod; int result; int shift; not 的部分: number = ~number; result = number + 256; (Ex.)以範例測資1來說, df(16進位) = 223 (10進位)...我們要的result是223 number = 32;(要得到223的解) number = ~number; (此時number == -33 ) result = number + 256; (result == 223) 所以我們找到32經過not的運算後可以得到df,也就是223, 所以要把(ASCII碼)32對應到的字元印出來。 這裡你可以用 number 從 0 跑到 255 去找出對應的值, 找到了之後就記錄起來並 break 掉。 leftR 的部分:(假設要轉的位數是shift位) number = number * pow( 2 , shift%8 ); (你要include <math.h> ) number_mod = number % 256; number = number / 256; result = number + number_mod; (Ex.)以範例測資1來說, leftR 3,向左側移三位。 1(16進位) = 1(10進位)...我們要的result是1 shift = 3; number = 32;(要得到1的解) number = number * pow(2,shift%8); (number == 32 * 8 == 256 ) number_mod = number % 256;(number_mod == 0 ) number = number / 256;(number == 1 ) result = number + number_mod; (result == 1 + 0 == 1 ) 於是我們找到了32可以經過左移三位後得到1 rightR 的部分:(假設要轉的位數是shift位) number = number * 256; number = number / pow( 2 , shift%8 ); number_mod = number % 256; number = number / 256; result = number + number_mod; (Ex.)以範例測資1來說, rightR 4,向右側移四位。 2(16進位) = 2(10進位)...我們要的result是2 shift = 4; number = 32(要得到2的解) number = number * 256; (number == 8192) number = nubmer / pow ( 2 , 4 ); (number == 512) number_mod = number % 256; (number_mod == 0) number = number / 256; (number == 2) result = number + number_mod; (result = 2) 於是我們找到了32可以經過右移四位後得到2 補充:對於left 和 right 的作法, 我是想像成16個bits在做運算 以上是我的作法, 請各位多多指教,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.192 ※ 編輯: oncemore 來自: 140.112.4.195 (12/05 21:39) ※ 編輯: oncemore 來自: 140.112.4.195 (12/05 21:56)

12/05 21:59, , 1F
有傳聞說hw 10 的deadline 可能會提前到這禮拜,所以大家
12/05 21:59, 1F

12/05 21:59, , 2F
盡量能早點完成就早點完成
12/05 21:59, 2F
文章代碼(AID): #1EtCb1MA (b00902HW)
討論串 (同標題文章)
文章代碼(AID): #1EtCb1MA (b00902HW)