[討論] 雙班 hw 9-2

作者: oncemore (超級喜歡林瑋恩)   2011-12-05 21:38:06
給一些不會做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在做運算
以上是我的作法,
請各位多多指教,謝謝。
作者: oncemore (超級喜歡林瑋恩)   2011-02-05 21:59:00
有傳聞說hw 10 的deadline 可能會提前到這禮拜,所以大家盡量能早點完成就早點完成

Links booklink

Contact Us: admin [ a t ] ucptt.com