格雷码与十进制码的转换

没有用php的位运算,效率会低些,算是完整的反映了转换规则, 基本上就是:格雷码 转成 二进制码 转成 十进制码

十进制码转格雷码

function decimal_to_gray($decimal){
    //$decimal = str_split((string)decdecimal($decimal));
    //先把十进制整形树字转换成二进制码
    $decimal = (string)decbin($decimal);
    $len = 4 - strlen($decimal);
    if($len > 0){
        for($i =0 ;$i< $len; $i++ ){
            $decimal = '0'.$decimal;
        }
    }
    $decimal = str_split($decimal);
    $gray = '';
    foreach($decimal as $k=>$v){
        if($k == 0){
            $gray .= $v;
        }else{
            $gray .= $decimal[$k-1] ^ (int)$v;
        }
    }
    return $gray;
}

格雷码转十进制码

function gary_to_decimal($gray){
    $gray = str_split((string)$gray);
    $decimal = '';
    $prev = 0;
    foreach($gray as $k=>$v){
        if($k == 0){
            $decimal .= $prev = $v;
        }else{
            $decimal .= $prev = (int)$v ^ $prev;
        }
    }
    //将获得的二进制码转换成十进制码
    return bindec($decimal);
}

你可能感兴趣的:(格雷码与十进制码的转换)