二进制数是存储数字的默认方式,但在许多应用中,二进制数很难使用,需要对二进制数进行修改。这就是格雷码非常有用的地方。
null
格雷码的特性是 两个连续的数字只有一位不同 由于这一特性,格雷码以最小的努力在各种状态之间循环,并用于K映射、纠错、通信等。
如何生成n位格雷码?
Following is 2-bit sequence (n = 2) 00 01 11 10Following is 3-bit sequence (n = 3) 000 001 011 010 110 111 101 100And Following is 4-bit sequence (n = 4) 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
n位格雷码可以使用以下步骤从(n-1)位格雷码列表中生成。
- 设(n-1)位格雷码列表为L1。创建另一个与L1相反的列表L2。
- 通过在L1的所有代码中添加“0”前缀来修改列表L1。
- 通过在L2的所有代码中添加前缀“1”来修改列表L2。
- 连接L1和L2。串联列表是n位格雷码的必需列表。
请参考 n位格雷码 详细的计划。
如何将二进制转换为灰色,反之亦然?
Binary : 0011Gray : 0010Binary : 01001Gray : 01101
在计算机科学中,很多时候我们需要将二进制代码转换为格雷码,反之亦然。此转换可以通过应用以下规则来完成:
二进制到灰度转换:
- 格雷码的最高有效位(MSB)始终等于给定二进制码的最高有效位。
- 输出格雷码的其他位可以通过对该索引和前一索引处的二进制码位进行异或运算来获得。
灰度到二进制转换:
- 二进制代码的最高有效位(MSB)始终等于给定格雷码的最高有效位。
- 通过检查该索引处的格雷码位,可以获得输出二进制码的其他位。如果当前格雷码位为0,则复制上一个二进制码位,否则复制上一个二进制码位的反转。
以下是上述步骤的实施情况。
C++
// C++ program for Binary To Gray // and Gray to Binary conversion #include <iostream> using namespace std; // Helper function to xor two characters char xor_c( char a, char b) { return (a == b) ? '0' : '1' ; } // Helper function to flip the bit char flip( char c) { return (c == '0' ) ? '1' : '0' ; } // function to convert binary string // to gray string string binarytoGray(string binary) { string gray = "" ; // MSB of gray code is same as binary code gray += binary[0]; // Compute remaining bits, next bit is computed by // doing XOR of previous and current in Binary for ( int i = 1; i < binary.length(); i++) { // Concatenate XOR of previous bit // with current bit gray += xor_c(binary[i - 1], binary[i]); } return gray; } // function to convert gray code string // to binary string string graytoBinary(string gray) { string binary = "" ; // MSB of binary code is same as gray code binary += gray[0]; // Compute remaining bits for ( int i = 1; i < gray.length(); i++) { // If current bit is 0, concatenate // previous bit if (gray[i] == '0' ) binary += binary[i - 1]; // Else, concatenate invert of // previous bit else binary += flip(binary[i - 1]); } return binary; } // Driver program to test above functions int main() { string binary = "01001" ; cout << "Gray code of " << binary << " is " << binarytoGray(binary) << endl; string gray = "01101" ; cout << "Binary code of " << gray << " is " << graytoBinary(gray) << endl; return 0; } |
JAVA
// Java program for Binary To Gray // and Gray to Binary conversion import java.io.*; class code_conversion { // Helper function to xor // two characters char xor_c( char a, char b) { return (a == b) ? '0' : '1' ; } // Helper function to flip the bit char flip( char c) { return (c == '0' ) ? '1' : '0' ; } // function to convert binary // string to gray string String binarytoGray(String binary) { String gray = "" ; // MSB of gray code is same // as binary code gray += binary.charAt( 0 ); // Compute remaining bits, next bit is // computed by doing XOR of previous // and current in Binary for ( int i = 1 ; i < binary.length(); i++) { // Concatenate XOR of previous bit // with current bit gray += xor_c(binary.charAt(i - 1 ), binary.charAt(i)); } return gray; } // function to convert gray code // string to binary string String graytoBinary(String gray) { String binary = "" ; // MSB of binary code is same // as gray code binary += gray.charAt( 0 ); // Compute remaining bits for ( int i = 1 ; i < gray.length(); i++) { // If current bit is 0, // concatenate previous bit if (gray.charAt(i) == '0' ) binary += binary.charAt(i - 1 ); // Else, concatenate invert of // previous bit else binary += flip(binary.charAt(i - 1 )); } return binary; } // Driver program to test above functions public static void main(String args[]) throws IOException { code_conversion ob = new code_conversion(); String binary = "01001" ; System.out.println( "Gray code of " + binary + " is " + ob.binarytoGray(binary)); String gray = "01101" ; System.out.println( "Binary code of " + gray + " is " + ob.graytoBinary(gray)); } } // This code is contributed by Anshika Goyal. |
Python3
# Python3 program for Binary To Gray # and Gray to Binary conversion # Helper function to xor two characters def xor_c(a, b): return '0' if (a = = b) else '1' ; # Helper function to flip the bit def flip(c): return '1' if (c = = '0' ) else '0' ; # function to convert binary string # to gray string def binarytoGray(binary): gray = ""; # MSB of gray code is same as # binary code gray + = binary[ 0 ]; # Compute remaining bits, next bit # is computed by doing XOR of previous # and current in Binary for i in range ( 1 , len (binary)): # Concatenate XOR of previous # bit with current bit gray + = xor_c(binary[i - 1 ], binary[i]); return gray; # function to convert gray code # string to binary string def graytoBinary(gray): binary = ""; # MSB of binary code is same # as gray code binary + = gray[ 0 ]; # Compute remaining bits for i in range ( 1 , len (gray)): # If current bit is 0, # concatenate previous bit if (gray[i] = = '0' ): binary + = binary[i - 1 ]; # Else, concatenate invert # of previous bit else : binary + = flip(binary[i - 1 ]); return binary; # Driver Code binary = "01001" ; print ( "Gray code of" , binary, "is" , binarytoGray(binary)); gray = "01101" ; print ( "Binary code of" , gray, "is" , graytoBinary(gray)); # This code is contributed by mits |
C#
// C# program for Binary To Gray // and Gray to Binary conversion. using System; class GFG { // Helper function to xor // two characters static char xor_c( char a, char b) { return (a == b) ? '0' : '1' ; } // Helper function to flip the bit static char flip( char c) { return (c == '0' ) ? '1' : '0' ; } // function to convert binary // string to gray string static String binarytoGray(String binary) { String gray = "" ; // MSB of gray code is same // as binary code gray += binary[0]; // Compute remaining bits, next // bit is computed by doing XOR // of previous and current in // Binary for ( int i = 1; i < binary.Length; i++) { // Concatenate XOR of previous // bit with current bit gray += xor_c(binary[i - 1], binary[i]); } return gray; } // function to convert gray code // string to binary string static String graytoBinary(String gray) { String binary = "" ; // MSB of binary code is same // as gray code binary += gray[0]; // Compute remaining bits for ( int i = 1; i < gray.Length; i++) { // If current bit is 0, // concatenate previous bit if (gray[i] == '0' ) binary += binary[i - 1]; // Else, concatenate invert of // previous bit else binary += flip(binary[i - 1]); } return binary; } // Driver program to test above // functions public static void Main() { String binary = "01001" ; Console.WriteLine( "Gray code of " + binary + " is " + binarytoGray(binary)); String gray = "01101" ; Console.Write( "Binary code of " + gray + " is " + graytoBinary(gray)); } } // This code is contributed by nitin mittal. |
PHP
<?php // PHP program for Binary To Gray // and Gray to Binary conversion // Helper function to xor two characters function xor_c( $a , $b ) { return ( $a == $b ) ? '0' : '1' ; } // Helper function to flip the bit function flip( $c ) { return ( $c == '0' ) ? '1' : '0' ; } // function to convert binary string // to gray string function binarytoGray( $binary ) { $gray = "" ; // MSB of gray code is same as // binary code $gray .= $binary [0]; // Compute remaining bits, next bit is // computed by doing XOR of previous // and current in Binary for ( $i = 1; $i < strlen ( $binary ); $i ++) { // Concatenate XOR of previous bit // with current bit $gray .= xor_c( $binary [ $i - 1], $binary [ $i ]); } return $gray ; } // function to convert gray code string // to binary string function graytoBinary( $gray ) { $binary = "" ; // MSB of binary code is same as gray code $binary .= $gray [0]; // Compute remaining bits for ( $i = 1; $i < strlen ( $gray ); $i ++) { // If current bit is 0, concatenate // previous bit if ( $gray [ $i ] == '0' ) $binary .= $binary [ $i - 1]; // Else, concatenate invert of // previous bit else $binary .= flip( $binary [ $i - 1]); } return $binary ; } // Driver Code $binary = "01001" ; print ( "Gray code of " . $binary . " is " . binarytoGray( $binary ) . "" ); $gray = "01101" ; print ( "Binary code of " . $gray . " is " . graytoBinary( $gray )); // This code is contributed by mits ?> |
Javascript
<script> // Javascript program for Binary To Gray // and Gray to Binary conversion // Helper function to xor two characters function xor_c(a, b){ return (a == b) ? '0' : '1' ; } // Helper function to flip the bit function flip(c){ return (c == '0' ) ? '1' : '0' ; } // Function to convert binary string // to gray string function binarytoGray(binary) { let gray = "" ; // MSB of gray code is same // as binary code gray += binary[0]; // Compute remaining bits, next bit // is computed by doing XOR of previous // and current in Binary for (let i = 1; i < binary.length; i++) { // Concatenate XOR of previous bit // with current bit gray += xor_c(binary[i - 1], binary[i]); } return gray; } // Function to convert gray code string // to binary string function graytoBinary(gray) { let binary = "" ; // MSB of binary code is same // as gray code binary += gray[0]; // Compute remaining bits for (let i = 1; i < gray.length; i++) { // If current bit is 0, concatenate // previous bit if (gray[i] == '0' ) binary += binary[i - 1]; // Else, concatenate invert of // previous bit else binary += flip(binary[i - 1]); } return binary; } // Driver code let binary = "01001" ; document.write( "Gray code of " + binary + " is " + binarytoGray(binary) + "</br>" ); let gray = "01101" ; document.write( "Binary code of " + gray + " is " + graytoBinary(gray)); // This code is contributed by vaibhavrabadiya3 </script> |
输出
Gray code of 01001 is 01101Binary code of 01101 is 01001
使用位运算符将二进制转换为灰色
C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std; int greyConverter( int n) { return n ^ (n >> 1); } int main() { int n = 3; cout << greyConverter(n) << endl; n = 9; cout << greyConverter(n) << endl; return 0; } |
JAVA
// Java Program for above approach public class Main { public static int greyConverter( int n) { return n ^ (n >> 1 ); } // Driver code public static void main(String[] args) { int n = 3 ; System.out.println(greyConverter(n)); n = 9 ; System.out.println(greyConverter(n)); } } // This code is contributed by divyesh072019 |
Python3
# Python3 code for above approach def greyConverter(n): return n ^ (n >> 1 ) n = 3 print (greyConverter(n)) n = 9 print (greyConverter(n)) # This code is contributed by divyeshrabadiya07 |
C#
// C# program for above approach using System; class GFG { static int greyConverter( int n) { return n ^ (n >> 1); } // Driver Code public static void Main( string [] args) { int n = 3; Console.WriteLine(greyConverter(n)); n = 9; Console.WriteLine(greyConverter(n)); } } // This code is contributed by rutvik_56 |
Javascript
<script> // Javascript program for above approach function greyConverter(n) { return n ^ (n >> 1); } // Driver code let n = 3; document.write(greyConverter(n) + "</br>" ); n = 9; document.write(greyConverter(n)); // This code is contributed by suresh07 </script> |
输出
213
使用位运算符将灰度转换为二进制
C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std; int binaryConverter( int n) { int res = n; while (n > 0) { n >>= 1; res ^= n; } return res; } // Driver Code int main() { int n = 4; // Function call cout << binaryConverter(n) << endl; return 0; } // This code is contributed by sshrey47 |
JAVA
// Java Program for above approach public class Main { public static int binaryConverter( int n) { int res = n; while (n > 0 ) { n >>= 1 ; res ^= n; } return res; } // Driver code public static void main(String[] args) { int n = 4 ; System.out.println(binaryConverter(n)); } } // This code is contributed by sshrey47 |
Python3
# Python3 code for above approach def binaryConverter(n): res = n while n > 0 : n >> = 1 res ^ = n return res n = 4 print (binaryConverter(n)) # This code is contributed by sshrey47 |
C#
using System; public class GFG { static int binaryConverter( int n) { int res = n; while (n > 0) { n >>= 1; res ^= n; } return res; } static public void Main() { int n = 4; Console.WriteLine(binaryConverter(n)); } } // This code is contributed by sshrey47 |
Javascript
<script> // Javascript program for above approach function binaryConverter(n) { let res = n; while (n > 0) { n >>= 1; res ^= n; } return res; } let n = 4; // Function call document.write(binaryConverter(n)); // This code is contributed by mukesh07. </script> |
输出
7
本文由Utkarsh Trivedi撰稿。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END