- ベストアンサー
ビット幅について質問
risataro419の回答
- risataro419
- ベストアンサー率46% (60/130)
符号なし2進数 5=00000101 符号あり2進数 5=00000101 -5=11111011 ちなみに、考え方ですが・・・ 通常の2進数 0~255ですよね? これが、整数251の場合、2進数であらわすと「11111011」ですよね? これ、考え方は、 【符号なし】 1 1 1 1 1 0 1 1 ------------------------ 128 64 32 16 8 4 2 1 ビット(1)が立っている部分の--の下部の数字を加算してください。 すると、 128+64+32+16+8+0+2+1 =251です。 【符号なし】 ※128の部分が-128と置き換えます。 1 1 1 1 1 0 1 1 ------------------------ -128 64 32 16 8 4 2 1 → -128+64+32+16+8+0+2+1 =-5です。 符号ありの整数5を上記に当てはめると。 0 0 0 0 0 1 0 1 ------------------------ -128 64 32 16 8 4 2 1 → = 0 + 0 +0 +0 +0 +4 +0 +1 =5です。 なんとなくですが、わかりましたでしょうか? ちなみに、4bitであらわすと、8+4+2+1(符号なし)→ -8+4+2+1(符号あり)になります。
関連するQ&A
- プログラミングにビットについて
独学でプログラミングを勉強しているものですが、ビットについてまだ完全に理解できていません。 ビットというのは、メモリだとか、容量だとかという大雑把なことは分かっているのですが 詳しく完全に理解できてるわけではありません。 そこで 今日変数の復習をしていた所 教本の説明の欄の ○○(数字)ビット符号付き整数 みたいなものに疑問をもちまして 例えばintなら32ビット符号付き整数というような説明の形なのですが この場合のintの説明の解釈というのは 二進数で0一つで1ビットを占めているとして 32ビット符号付き整数というのは 二進数で言う+(-)0x31の数値を表現することができ、 なので この場合、+(-)を1ビット占めているので表現できる数字は10進数で言う+(-)2^31-1が限界ということでいいのでしょうか?
- ベストアンサー
- C・C++・C#
- ビット演算で00000001と1の頭に0を付ける?
https://www.grapecity.com/japan/powernews/column/clang/019/page02.htm ビット演算子 表1にCのビット演算子を掲げておきます。ビット演算とは言っても、扱う値はバイト単位などCの一般的な整数のデータ型です。ビット演算子は、それらの値をビット単位で計算します。 ビットシフト演算(<< >>)~2倍と1/2 例えばunsigned char型の1は、2進数では"00000001"という形のビット列(ビットパターン)になります。これを1桁左にずらす(シフトする)と"00000010"となります。ずらしてあふれた左端の0は消え、空いた右端には0が入ります。 "00000001"は10進数の「1」、"00000010"は10進数の「2」です。つまり、ビット列を左に1桁シフトすると値は2倍になるのです。 ----------------------------------------- 以上ですが、C言語の、ビット演算の解説の抜粋です。ビット演算はまだ覚えたてですが、"00000001"整数1の頭にわざわざ、0を沢山 つける目的は何なのでしょうか!? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ビット幅とその出力について
C言語を習い始めた者ですが、ビット幅とその出力についてわからないことが二つでてきました。以下のソースコードを見てください。 #include <stdio.h> int main(void) { char ss[] = "ABCDEF"; void *vpt; int idt; vpt = ss; idt = * (char *)vpt; printf("char:%x\n", idt); idt = *(int *)vpt; printf("char:%x\n", idt); return 0; } 出力結果は char:41 char:44434241 となります。 一つ目のわからないことは char:41 についてです。私はchar型のビット幅は8ビットで文字ABの16進数を出力すると予想していました。ところが結果は 文字A の16進数の41のみが出力されました。Aの二進数は 1010、 Bの二進数は1011で それぞれ4ビットずつ持っていて合わせて8ビットになるのでそう考えていました。よくわかりませんが結果から、文字一文字に対して8ビットつまり1バイトに相当するのでしょうか? 二つ目は char:44434241 についてです。一つ目の質問に書いた推測が正しければ1文字を1バイトと考えて16進数にすると Aは41 Bは42 Cは43 Dは44 になります。しかしポインタの先頭のアドレスはAになっているはずなのになぜか出力は char:41424344 ではなくchar:44434241になっています。順序が逆になっているのでしょうか? Cをはじめたばかりなので基本的なところがわかっていないかもしれませんが、説明に不足があればつけたしますのでどうかよろしくお願いします。
- ベストアンサー
- C・C++・C#
- ビット演算について
いつもお世話になります。 ビット演算について教えて下さい。 unsigned char buf1[1]=0x5a unsigned char buf1[2]=0x04 unsigned char buf1[3]=0x38 5a0438(16)を3バイトの値を12ビットずつの整数で得るにはどうしたらいいのでしょうか? 2進数表記では、 5A | 04 | 38 01011010 | 00000100 | 00111000 12ビットずつとは、 010110100000 010000111000 と区分し、10進数の整数値で得たいです。どのようにすればよいでしょうか? また、0x5Aなどの16進数を2進数のビットで考えるときに、 01011010を下位4ビットを10進数整数を得るにはどうしたらよいのでしょうか? 上記2点、どうぞよろしくお願い致します。
- ベストアンサー
- C・C++・C#
- 100ビットの整数型
0 から 2^100-1 までの整数について、とある計算をする必要があるのですが、java の int だと 32ビットしかないのであふれてしまいます。 100ビットの整数型というのは自作するしかないでしょうか?
- ベストアンサー
- Java
- 自動変換について質問
僕はプログラミング初心者ですので、それを念頭に置いた上でわかりやすく且つ本質的なご教示希望します。よろしくお願いします^^ 参考書に「byte、shortはビット幅がcharより狭いのでcharからこれらの型には自動変換できない」と書いてありました。byteはcharよりビット幅が狭いから納得できるのですが、shortとcharのビット幅は同じ16です。なんで自動変換できないんですか?ビット幅が同じなのに、、
- ベストアンサー
- Java
- javaのbyte型の整数範囲の考え方
javaのbyte型に格納できる10進数の整数範囲の考え方についてです。 コンピュータ内部で-128がどのように表現されているのかが よく分からないので質問させてください。 byte型(8bit)は-128~127の整数範囲、とあります。 □□□□□□□□(8bit)あって 00000000~01111111が(整数0~+127)を表現。 1番左のビットは符号を表すためのビット(+なら0 -なら1) でよろしいのでしょうか? となると-1は マイナス→10000001(1番左のビットは1でマイナスを表す)でいいのでしょうか? もしこれだと、-128の場合そもそもビットが8個しかないので 11111111だと一番左のビットが1でマイナスを表すとして 残りの7ビット1111111で127を表現しているような気がして、 11111111(8bit)は-127では?と思うんです。 こういうのが詳しく書いてあるサイトなどはないでしょうか? ここでご指導頂ければありがたいです。
- 締切済み
- Java
- 補数について質問です。「次の10進数を8ビットの2の補数に変換せよ」(
補数について質問です。「次の10進数を8ビットの2の補数に変換せよ」(1)-111 まず絶対値をとり111にする。次に111を2進数で表す。0001 0001 0001となりますが、8ビットの2の補数に直すため0001 0001 0001の部分は8桁にしなくてはいけませんが、12桁になってしまいます。こういう場合どうすればいいのですか?
- ベストアンサー
- その他(学問・教育)