首頁 >後端開發 >C++ >格雷碼的十進制等價及其逆序

格雷碼的十進制等價及其逆序

WBOY
WBOY轉載
2023-09-07 18:33:021518瀏覽

格雷碼的十進制等價及其逆序

格雷碼或反射二進位碼是一種數字二進位表示形式,其中兩個連續數字僅相差一位。

例如1的格雷碼是001,2的格雷碼是011。

格雷碼通常用於糾錯,因為它可以防止在狀態變更時通常的二進位表示中可能發生的一些資料錯誤。

由於其獨特的屬性,格雷碼在 k-map、通訊等方面也很有幫助。

先決條件

在進一步閱讀之前,請先研究十進制、二進制和格雷碼符號。

問題陳述 1

給定一個十進位數 n,求該數的十進位形式的格雷碼。

範例

Input: 3
Output: 2

說明 -> 3 的二進位表示為 011。其格雷碼表示為 010。010 的十進位表示為 2。

因此,3 的格雷碼的十進位等效值為 2。

Input: 5
Output: 7

說明 -> 5 的二進位表示形式為 101。其格雷碼表示形式為 111,其十進位表示法為 7。

因此,5 的格雷碼的十進位等效值為 7。

解決方案

編譯器理解二進位格式的數字。

因此,在我們的程式中,當我們輸入十進位格式的數字時,它會被解釋為二進位。

因此,我們只需要將數字從其二進位等價物轉換為其格雷碼即可。

二進位到格雷碼轉換

二進位表示和格雷碼的最左邊的位是相等的。透過對連續的二進位位元進行異或運算可以找到右側的以下位元。

例如 -

考慮n = 3。3的二進位代碼是011。

  • 二進位碼和格雷碼的最左邊位相等。因此,格雷碼中從左起第一位就是0。

  • 對於左起第二位,將二進位程式碼中左起第一位和第二位進行異或。 0 異或 1 = 1。

  • 對於左起第三位,將二進位程式碼中左起第二位和第三位進行異或。 1 異或 1 = 0。

因此格雷碼:010。

演算法:使用位元運算子

我們可以透過以下步驟來取得數字n的格雷碼 -

  • n 右移 1。

  • 將右移後的數字與原始 n 進行異或。

範例

下面是一個使用位元運算子從二進位程式碼中尋找格雷碼的 C 程式

#include <bits/stdc++.h>
using namespace std;
//This function returns the decimal equivalent
// of the gray code of n.
int dec_equi_of_gray(int n) {
   return n ^ (n >> 1);
}
int main(){
   int n = 3;
   cout<<"The decimal equivalent of the gray code of 3 is: ";
   
   //Function call to convert binary code to gray code
   cout << dec_equi_of_gray(n) << endl;
   return 0;
}

輸出

The decimal equivalent of the gray code of 3 is: 2

問題陳述 2

給定格雷碼的十進位值,求其十進位碼值。

範例

Input: 15
Output: 10

解釋 -> 作為輸入給出的格雷碼:1111(二進位值 15)。

現在,將格雷碼轉換為二進位碼,從 1111 得到 1010。

1010 是 10 的二進位值。因此,輸出。

Input: 10
Output: 12

解釋 -> 作為輸入給出的格雷碼:1010(二進位值 10)。

格雷碼1010的二進位為1100。1100的十進位為12。

格雷碼到二進位碼的轉換

二進位碼的最左邊位元(MSB)與格雷碼的MSB相同。透過將前一個索引二進位位元與目前索引灰階位元進行異或,可以找到下列位元。

例如:考慮格雷碼 1111。

  • 二進位碼的 MSB 將與格雷碼的 MSB 相同。因此,MSB 將為 1。

  • 對於左二位,檢查格雷碼左二位與二進位碼最左位的異或。因此,1 ^ 1 = 0。

  • 同樣,對於最左邊的第三位,0 ^ 1 = 1。

  • 對於最左第四位,1 ^ 1 = 0。

因此二進位代碼:1010。

範例

下面是一個 C 程序,用於使用位元運算子從格雷碼中尋找二進位代碼

#include <bits/stdc++.h>
using namespace std;

//This function returns the decimal value of 
//the binary code converted from the gray code n.
int gray_to_binary(int n){
   int binary = n;
   while (n > 0){
      n >>= 1;
      binary ^= n;
   }
   return binary;
}
// Driver Code
int main(){
   int n = 15;
   cout<<"The decimal value of the binary code converted from the gray code is: ";
   
   // Function call to convert gray code to binary code
   cout << gray_to_binary(n) << endl;
   
   return 0;
}

輸出

The decimal value of the binary code converted from the gray code is: 10

結論

本文解決了尋找給定數字 n 的格雷碼十進制等價及其逆的問題。我們使用位元運算子解決了這個問題。針對問題的兩個部分都提供了 C 程序。

以上是格雷碼的十進制等價及其逆序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除