- The Modern C++ Challenge
- Marius Bancila
- 242字
- 2021-06-25 22:01:24
10. Gray code
Gray code, also known as reflected binary code or simply reflected binary, is a form of binary encoding where two consecutive numbers differ by only one bit. To perform a binary reflected Gray code encoding, we need to use the following formula:
if b[i-1] = 1 then g[i] = not b[i]
else g[i] = b[i]
This is equivalent to the following:
g = b xor (b logically right shifted 1 time)
For decoding a binary reflected Gray code, the following formula should be used:
b[0] = g[0]
b[i] = g[i] xor b[i-1]
These can be written in C++ as follows, for 32-bit unsigned integers:
unsigned int gray_encode(unsigned int const num)
{
return num ^ (num >> 1);
}
unsigned int gray_decode(unsigned int gray)
{
for (unsigned int bit = 1U << 31; bit > 1; bit >>= 1)
{
if (gray & bit) gray ^= bit >> 1;
}
return gray;
}
To print the all 5-bit integers, their binary representation, the encoded Gray code representation, and the decoded value, we could use the following code:
std::string to_binary(unsigned int value, int const digits)
{
return std::bitset<32>(value).to_string().substr(32-digits, digits);
}
int main()
{
std::cout << "Number\tBinary\tGray\tDecoded\n";
std::cout << "------\t------\t----\t-------\n";
for (unsigned int n = 0; n < 32; ++n)
{
auto encg = gray_encode(n);
auto decg = gray_decode(encg);
std::cout
<< n << "\t" << to_binary(n, 5) << "\t"
<< to_binary(encg, 5) << "\t" << decg << "\n";
}
}
推薦閱讀
- Learning Single:page Web Application Development
- Elastic Stack應(yīng)用寶典
- Web全棧工程師的自我修養(yǎng)
- Full-Stack React Projects
- Java應(yīng)用開發(fā)技術(shù)實例教程
- Python機器學(xué)習(xí)經(jīng)典實例
- Python:Master the Art of Design Patterns
- HTML5從入門到精通 (第2版)
- MongoDB,Express,Angular,and Node.js Fundamentals
- C專家編程
- Spring Boot+Vue全棧開發(fā)實戰(zhàn)
- Emgu CV Essentials
- SQL Server 2016 從入門到實戰(zhàn)(視頻教學(xué)版)
- Java并發(fā)編程之美
- ActionScript 3.0從入門到精通(視頻實戰(zhàn)版)