10進数を2進数に、2進数を10進数に変換できます。しかし、「256」という数字をどのように表現できますか?
255 = 11111111
1バイトに8桁を超える2進数(ビット)を含めることはできません。これはどのように可能ですか?
10進数を2進数に、2進数を10進数に変換できます。しかし、「256」という数字をどのように表現できますか?
255 = 11111111
1バイトに8桁を超える2進数(ビット)を含めることはできません。これはどのように可能ですか?
回答:
256をバイナリで表現する方法を要求しますが、格納される最大数が255であるときに、なぜバイトは256の異なる数を格納できると言うのか疑問に思っていると思います。実際には最初の数字、1は2番目、2は3番目です... 255は256番目です。
また、11111111は、符号なしバイトの場合のみ255です。符号付きバイトがある場合(符号付き値は負の値を保持できるものです)、11111111は実際には-1です。http://en.wikipedia.org/wiki/Two's_complementを参照してください。他の人が言ったように、11111111にビットを追加し、データ型が8ビットのみをサポートできる場合、最後のビットはオーバーフローして残ります。 0.符号付きバイトの場合、値の範囲は-128〜127です。128個の負の数値+ 0 + 127個の正の数値=合計256個の数値。
符号付きの値の場合、最初のビットは「符号」ビットです。このビットが設定されている場合、数値は負です。10000000は負、01000000は正、11111111は負、01111111は正...
Windowsを使用している場合(おそらくMacにもあります)、電卓を開いてプログラマモードに切り替え、sbyteを選択し、ビットをいじって小数表現との相関を確認できます。
既にご存知のように、255d(10進数)は11111111b(バイナリ)に相当します。値に1を追加する場合、2つの可能性があります。
どちらか8ビットしかありません。この場合、いわゆるオーバーフローが発生します。したがって、「内部的に」1が追加され、100000000b(9ビットで256d)になります。ただし、8ビットしか使用できないため、下位8ビットが「返されます」。そのため、最終的には0d = 0bになります(ほとんどのコンピューターアーキテクチャでは、特記事項として特別なオーバーフローフラグが設定されます)。
これは、指で数えるのと同じだと考えてください。あなたの指が9dを示していると想像してください。次に、もう1本指を追加します。最終的に10になります。もう1つ追加したい場合はどうしますか?
もう1つの可能性は、8ビット以上が使用可能であることです。この場合、最初にもう1桁追加するだけで、結果は実際に100000000b = 256dになります。
バイトは、コンピューターシステム(メモリシステム)がアドレスできる最小の「ユニット」です。つまり、1ビットだけを知りたい場合は、メモリシステムにアドレスから特定のバイトを提供するように依頼し、自分の興味のあるビットの値を把握する必要があります。
しかし、8ビットが1バイトを構成するのと同じように、より大きなデータ型もあります。2バイトはワード(16ビット)を構成し、2ワード(4バイト、32ビット)はダブルワードを構成します。そして、今日の標準64ビットアーキテクチャには、64ビットデータ型(いわゆるレジスタ)さえあります。