--- title: Gray code id: 5a23c84252665b21eecc7e80 challengeType: 5 videoUrl: '' localeTitle: 格雷码 --- ## Description
格雷码是二进制编码的一种形式,其中连续数字之间的转换仅相差一位。这是一种有用的编码,用于减少硬件数据危险,其值快速变化和/或连接到较慢的硬件作为输入。从左到右或从上到下依次为卡诺图生成输入也很有用。创建一个函数来编码数字并解码格雷码中的数字。该函数应该有2个参数。第一个是布尔值。该函数应编码为true,解码为false。第二个参数是要编码/解码的数字。显示所有5位二进制数的正常二进制表示,格雷码表示和解码格雷码值(0-31包括0,不需要前导0)。有许多可能的格雷码。以下编码所谓的“二进制反射格雷码”。
编码(MSB为0位,b为二进制,g为格雷码):
if b[i-1] = 1
g[i] = not b[i]
else
g[i] = b[i]
要么:
g = b xor (b logically right shifted 1 time)
解码(MSB为0位,b为二进制,g为格雷码):
b[0] = g[0]
for other bits:
b[i] = g[i] xor b[i-1]
## Instructions
## Tests
```yml tests: - text: gray应该是一个功能。 testString: 'assert(typeof gray=="function","gray should be a function.");' - text: 'gray(true,177)应该返回一个数字。' testString: 'assert(typeof gray(true,177)=="number","gray(true,177) should return a number.");' - text: 'gray(true,177)应该返回233 。' testString: 'assert.equal(gray(true,177),233,"gray(true,177) should return 233.");' - text: 'gray(true,425)应该返回381 。' testString: 'assert.equal(gray(true,425),381,"gray(true,425) should return 381.");' - text: 'gray(true,870)应该返回725 。' testString: 'assert.equal(gray(true,870),725,"gray(true,870) should return 725.");' - text: 'gray(false,233)应该返回177 。' testString: 'assert.equal(gray(false,233),177,"gray(false,233) should return 177.");' - text: 'gray(false,381)应该返回425 。' testString: 'assert.equal(gray(false,381),425,"gray(false,381) should return 425.");' - text: 'gray(false,725)应该返回870 。' testString: 'assert.equal(gray(false,725),870,"gray(false,725) should return 870.");' ```
## Challenge Seed
```js function gray(enc, number) { // Good luck! } ```
## Solution
```js // solution required ```