2017-01-23 12 views
-4

n-1ビットを使用してnビットを含む数値を表す一般的な方法がありますか。例えばを示しています。このビットは、XXX where X = {0|1}と3ビットを使用して4ビットです。また、マッピングは、衝突なしに元のバイナリを元に戻すことができる必要があります。ビット数を1減らす

このpageは、これまでビットの数を数えようと試みたが、ビット数は減らさないという最も関連性の高いリファレンスです。

編集:これは不可能だと私は知っていましたが、そうするための回避策が存在するかどうか不思議です!

+3

間の1対1のマッピングを確立するために管理ですから、圧縮したい場合は非常に巧妙になりますnビットのデータを「n-1」にするか?クール。次に、「n-1」を「n-2」に圧縮してゼロにする。完璧な圧縮。あなたは確かにノーベル賞を得るでしょう。 –

+1

どうやってそれをすることができますか? – OldProgrammer

+0

4ビットは16個の可能な値をエンコードします。 3ビットは8つの可能な値を符号化する。だから答えはNOです。 – user3386109

答えて

3

nビットで2^nの可能な値があり、(n-1)ビットで2 ^(n-1)の値があります。だからあなたは前者から後者に無損失に変換することはできません。

それがすべてで可能であった場合は、再帰的にあなたのn-1ビットのn-2ビットを使用するには、などすべてが0ビット:)あなたはリンク先のページでmisleadedます

で表現だろう表すことができますこれは、x &= x-1がビット列の1を削除すると説明しています。

10100 
& 10011 
= 10000 
+0

私はここにあなたのポイントを参照してください!質問を掲示している間、私はこのことを最初から知っていました。私はビットの数を減らすことができるかどうかを確認するためにこのアプローチに従うことを考えていました!とにかく、説明のおかげで。 – hmofrad

1

あなたは16個の数字

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111 

と8つの数字

000,001,010,011,100,101,110,111. 
+1

私はあなたの例を 'n = 2'に減らして、より明確にすることができます:)あるいは' n = 1'に... –

関連する問題