No.7
- 回答日時:
> sizeof()関数を利用してINT型の変数のビット数を求め
sizeof()関数というのはsizeof演算子のことだとして...
sizeof演算子で知ることができるのは、型が占有する記憶域のバイト数だけです。その中には詰め物ビットが含まれている可能性があるため、単に sizeof(INT) * CHAR_BIT とするだけでは有効ビット数を求めることはできません。
ただし、処理系を特定できるのであれば、この限りではありません。
No.5
- 回答日時:
★アドバイス
・このような問題は次のステップで行います。
(1)INT型のビット数を数える
(2)数えたビット数から最上位ビットを作成
(3)最上位ビットより下位へ向かって論理積で0、1を表示
(4)最下位ビットになるまで繰り返す
このような感じで行えば良いです。
ビット演算(論理和、論理積、シフト演算)を使います。
ビット演算については次のサイトを参考にして下さい。
http://www9.plala.or.jp/sgwr-t/c/sec14.html
http://www.geocities.jp/ky_webid/c/049.html
http://www1.cts.ne.jp/~clab/Contents/Bitindex.html
サンプル:
// INT 型のビット数を数える
int IntBitCount( void )
{
static const int table[] = {
0 + 0 + 0 + 0,
0 + 0 + 0 + 1,
0 + 0 + 1 + 0,
0 + 0 + 1 + 1,
0 + 1 + 0 + 0,
0 + 1 + 0 + 1,
0 + 1 + 1 + 0,
0 + 1 + 1 + 1,
1 + 0 + 0 + 0,
1 + 0 + 0 + 1,
1 + 0 + 1 + 0,
1 + 0 + 1 + 1,
1 + 1 + 0 + 0,
1 + 1 + 0 + 1,
1 + 1 + 1 + 0,
1 + 1 + 1 + 1,
};
static int count = 0;
if ( count == 0 ){
INT mask;
for ( mask = ~((INT)0) ; mask != 0 ; mask >>= 4 ){
count += table[ mask & 0xF ];
}
}
return count;
}
// INT 型のビット列を表示
void PrintBit( INT value )
{
INT msb = ((INT)1 << (IntBitCount() - 1)); // 最上位ビット
for ( ; msb != 0 ; msb >>= 1 ){
printf( (value & msb) ? '1' : '0' );
}
}
その他:
・sizeof演算子を使うということは1バイトを8ビットとして計算することになりますね。
コンピュータ(環境)によっては1バイトが9ビットだったり、long型が36ビットだったりします。
INT型も int 型と同じ意味合いで再定義されているとは限りません。多分。
なので 1 に INT をキャストして最上位ビットを作ったり、ビットを数えています。
その他はいろいろと工夫して下さい。
・以上。
参考URL:http://www9.plala.or.jp/sgwr-t/c/sec14.html
No.3ベストアンサー
- 回答日時:
sizeof()関数は、sizeof()演算子ですね。
ループで、1ビットを論理積評価して結果を逆順に表示するのが
簡単ですが、一例として以下も参考にしてみて下さい。
<リスト>
#include <stdio.h>
int main()
{
int i; … 1
unsigned int mask=0x80<<(8*(sizeof(i)-1)); … 2
printf("数値?"); … 3
scanf("%d",&i); … 4
do printf("%1d",i&mask?1:0); while (mask>>=1); … 5
printf("\n"); … 6
return 0; … 7
}
<説明>
1.int 型の変数宣言
2.1オクテット(最小バイトビット数が8ビット)
での最上位ビットを算出する。
つまり、
1オクテット(固定8ビット)の最上位ビットの 0x80 を
(バイトサイズ - 1)× 8 回
左シフトすれば良いわけです。
※2によりビットマスクが算出できます。
3、4.整数入力
5.ビットマスクを最上位から最下位までずらしてそれぞれの
入力整数値とビットマスクの論理積が 0 であれば目的ビットは 0、
論理積が 0以外 であれば目的ビットは 1 と出力します。
たとえば、
int : 2バイト
入力整数値(10進数):32768(16進で 0xF0F0)
(2進で 11110000 11110000)の時、
ビットマスク = 0x80 を (sizeof(int) - 1) * 8 回分、左シフト
= 0x80 を(2 - 1) * 8 回分、左シフト
= 0x8000 (2進で、10000000 00000000)
1回目:11110000 11110000 & 10000000 00000000 = 10000000 00000000
… 10進数で 0 以外なので「1」を表示(表示結果:1)
ビットマスクを右にずらすので、mask = 01000000 00000000
2回目:11110000 11110000 & 01000000 00000000 = 01000000 00000000
… 10進数で 0 以外なので「1」を表示(表示結果:11)
ビットマスクを右にずらすので、mask = 00100000 00000000
:
:
16回目:11110000 11110000 & 00000000 00000001 = 00000000 00000000
… 10進数で 0 なので「0」を表示(表示結果:11110000 11110000)
ビットマスクを右にずらすので、mask = 0000000 00000000
ループはマスクが 0 になったら抜けるので終了です
No.1
- 回答日時:
(x >> i) & 1
で x の i ビット目がわかる (シフト演算子などの動作をよく考えればわかる) ので, これを「上位ビットから順に」表示すればいい... のかなぁ?
しかし「sizeof() 関数」って.... そんなのどこにあったっけ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Ruby プログラミング 3 2023/06/09 14:30
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Oracle ビットで表せる数値について 3 2022/09/12 16:37
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語 3 2022/10/04 15:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
BMP画像のネガを作成するプログ...
-
PS3に搭載されている"Cell"は、...
-
8ビットのデータの、先頭ビット...
-
数独の3国同盟のアルゴリズム...
-
C言語で128bitの2進数のビット...
-
命令について
-
ビットシフトってどんな時使うの?
-
レジストってなんですか?
-
PICに書き込むプログラムや変数...
-
[C言語→アセンブリ言語]はどう...
-
PICでパルス数をカウントする方法
-
PICでパルス数をカウントし、カ...
-
バイナリの実行ファイルをgccを...
-
素数を求めるプログラム(アセン...
-
PC-G830
-
アセンブラでRS-232Cを制御
-
8086アセンブラで、メモリ間の...
-
アセンブラwordという単位
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
8ビットのデータの、先頭ビット...
-
ビットシフトってどんな時使うの?
-
verilog 符号付加減算(最上位...
-
一般のソフトで画像を扱う場合...
-
符号無し整数xを右にnビット回転
-
文字参照は10進数と16進数では...
-
シーケンス制御についての質問...
-
BMP画像のネガを作成するプログ...
-
アクセス(2003)のVBAでビット...
-
03分22秒36のような時間の単位...
-
命令について
-
10進数(+-)→2進数への変換(2)
-
C言語で128bitの2進数のビット...
-
1の補数
-
ビット列を表示するプログラム
-
ビットの取り出し方法
-
Python: 数値を反転させたい
-
PS3に搭載されている"Cell"は、...
おすすめ情報