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