給定一個數字的灰色代碼,找到數字的二進制代碼。格雷碼是一個二進制數字系統,其中兩個連續的值僅在一個比特中有所不同。格雷碼到二進制轉換
例如兩個位格雷碼是: 0 - 00 1 - 01 2 - 11 3 - 10
二進制是:
0 - 00 1 - 01 2 - 10 3 - 11
提供算法將數字的灰色代碼轉換爲二進制代碼。
例如,輸入爲11.預期輸出是10
給定一個數字的灰色代碼,找到數字的二進制代碼。格雷碼是一個二進制數字系統,其中兩個連續的值僅在一個比特中有所不同。格雷碼到二進制轉換
例如兩個位格雷碼是: 0 - 00 1 - 01 2 - 11 3 - 10
二進制是:
0 - 00 1 - 01 2 - 10 3 - 11
提供算法將數字的灰色代碼轉換爲二進制代碼。
例如,輸入爲11.預期輸出是10
格雷碼轉換爲二進制:
保留最顯著位,因爲它是和用於位的其餘部分不斷異或的連續的位。
即Gn Gn-1 Gn-2 ........ G1是格雷碼和Bn Bn-1 ....... B1是二進制碼。
BN = Gn和所有其他位BN-1 = GN-1 XOR GN
如果這是您自己問題的答案,則將其標記爲答案:) – JohnIdol 2011-03-01 13:20:14
警告 - 此答案稍微不正確。 Bn-1的正確公式是「Bn-1 = Bn XOR Gn-1」。請參閱[這裏](http://books.google.ca/books?id=MfapI7UIr9YC&lpg=PA51&ots=IKd__7XXio&dq=bn-1%20%22gray%20code%22%20gn&pg=PA50#v=onepage&q=bn-1%20 %22gray%20code%22%20gn&f = false)以獲取更多信息。 – 2011-06-16 17:26:06
如果你想要一個簡單的方法有,你可以使用一個良好的網上格雷碼轉換器:http://www.convertforfree.com/gray-code-converter/
<?php
功能gry_code($ n)的{
if($n == 0 || $n > 65) {
return "Invalid input please input between 1 to 65";
exit;
}
$arr = array();
array_push($arr,"0","1");
$i = 0;
$j = 0;
for ($i = 2; $i < (1<<$n); $i = $i<<1)
{
//duplicate the arr contents in reverse order
for ($j = $i-1 ; $j >= 0 ; $j--)
array_push($arr,$arr[$j]);
// append 0 to the first half
for ($j = 0 ; $j < $i ; $j++)
$arr[$j] = "0".$arr[$j];
// append 1 to the second half
for ($j = $i ; $j < 2*$i ; $j++)
$arr[$j] = "1".$arr[$j];
}
//return $arr;
$arr = array_slice($arr, -$n);
foreach($arr as $key => $arrx) {
echo $arrx."\n";
}
//return $arr;
}
print_ R(gry_code(5));
?>
這功課嗎?應該很容易查找。 – 2011-02-27 04:35:57
作業?你試過什麼了? – 2011-02-27 04:36:32
@sunmoon:如果你的答案給出了算法,你需要什麼幫助? – 2011-02-27 04:41:05