web-dev-qa-db-ja.com

「256」のバイナリ表現とは何ですか?

10進数を2進数に、2進数を10進数に変換できます。しかし、「256」という数字をどのように表すことができますか?

255 = 11111111

1バイトは、8桁を超える2進数(ビット)を持つことはできません。これはどのようにして可能ですか?

15
Pranit Bauva

256を2進数で表す方法を尋ねますが、格納できる最大数が255であるのに、バイトが256の異なる数値を格納できると人々が言う理由が不思議に思われると思います。は実際には最初の数値、1は2番目、2は3番目です... 255は256番目です。

また、11111111は、符号なしバイトの場合は255のみです。符号付きバイトがある場合(符号付きの値は負の値を保持できる値)、11111111は実際には-1です。 http://en.wikipedia.org/wiki/Two's_complement を参照してください。 2の補数が機能する方法、正の数に負の数を追加すると0になります。他の人が言ったように、11111111にビットを追加し、データ型が8ビットしかサポートできない場合、最後のビットはオーバーフローし、 0.符号付きバイトの場合、値の範囲は-128〜127です。128の負の数値+ 0 + 127の正の数値=合計256の数値。

符号付き値の場合、最初のビットは「符号」ビットです。このビットが設定されている場合、数値は負です。 10000000は負、01000000は正、11111111は負、01111111は正...

Windowsを使用している場合(Macにも搭載されている可能性があります)、電卓を開いてプログラマモードに切り替え、sbyteを選択し、ビットを操作して、10進表現との相関関係を確認できます。

Windows Calculator showing 256 in decimal and binary

40
mowwwalker

それを表すには、2バイトが必要です。 256 = 00000001 00000000

12
Michael S.

ご存じのとおり、255d(10進数)は11111111b(2進数)と同じです。値に1を加えたい場合、2つの可能性があります。

8ビットしかない。この場合、いわゆるoverflowが発生します。したがって、「内部」では、1が加算されて100000000b(9ビットで256d)になります。ただし、8ビットしか使用できないため、下位8ビットが「返されます」。したがって、最終的には0d = 0bになります(特別なオーバーフローフラグは、ほとんどのコンピュータアーキテクチャで、付記のように設定されます)。

これは、指で数えるのと同じだと考えてください。あなたの指が9dを示していると想像してください。次に、もう1本指を追加します。結果は10になります。さらに1つ追加する場合はどうしますか?

他の可能性としては、8ビット以上が利用可能であるということがあります。この場合、最初にもう1桁追加するだけで、結果は100000000b = 256dになります。

1バイトは、コンピュータシステム(メモリシステム)がアドレス指定できる最小の「単位」です。つまり、1ビットのみを知りたい場合は、メモリシステムにアドレスから特定のバイトを提供するように要求し、自分が興味のあるビットの値を把握する必要があります。

しかし、8ビットがバイトを構成するのと同じように、より大きなデータ型もあります。 2バイトはワード(16ビット)を構成し、2ワード(4バイト、32ビット)はダブルワードを構成します。そして、今日の標準の64ビットアーキテクチャには、64ビットデータ型(いわゆるレジスタ)さえあります。

11
Shi

これは100000000であり、1バイト以上が必要です。実際には9ビットが必要です。

5
Serious

ビットシフト 演算(バイナリ表現の エンディアンネス に応じて左または右)で表すことができます。たとえば、この1つのライナーはビッグエンディアン表現(最上位バイトが最初)で機能します。

1 << 8

符号なしbyteは、[0-255]の範囲を含む256個の値しか保持できません。値256の場合、整数など、より大きな値を保持できるデータ型を使用する必要があります。

0
oleksii