2011-02-27 4 views
2

숫자에 대한 회색 코드가 있으면 해당 숫자의 이진 코드를 찾습니다.그레이 코드에서 이진 코드로 변환

그레이 코드는 두 개의 연속적인 값이 단 하나의 비트 만 다른 이진 숫자 시스템입니다. 예 개의 비트 그레이 코드

이다 : 0-00 1-01 2-11 3-10

이진이다

0-00 1-01 2-10 3 - 11

숫자의 회색 코드를 이진 코드로 변환하는 알고리즘을 제공하십시오. 그대로

는 최상위 비트를 유지하고 나머지 비트에 대한 배타적 논리합 보관 : 예

는 입력 (11) 예상 출력 이진 그레이 코드 변환 10.

+0

이 숙제입니까? 쉽게 찾아 볼 수 있어야합니다. –

+0

숙제? 지금까지 뭐 해봤 어? –

+0

@sunmoon : 답이 알고리즘을 제공하면 무엇이 도움이 필요합니까? –

답변

2

임 연속 비트.

즉 Gn Gn-1 Gn-2 ........ G1은 회색 코드이고 Bn Bn-1 ....... B1은 2 진 코드입니다.

BN = 내지 Gn 다른 모든 비트에 대한 BN-1 = GN-1 XOR 내지 Gn

+0

이것이 자신의 질문에 대한 대답이라면 대답으로 표시하십시오 :) – JohnIdol

+0

경고 -이 대답은 약간 잘못되었습니다. 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) 자세한 정보. –

0
<?php 

함수 gry_code ($ 않음) {

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));

?>