はじめまして、今C言語の学習(半月ほど)を行っている者ですが
ビット演算子のところで悩んでおります。
問題文に
変数cの2ビット目と3ビット目をONにする、
あるいはOFFにするといった表記がでてくるのですが
このON、OFFとは何を意味しているのかいっこうにわかりません。
(私の考えではONとは1を意味しており2ビット目、3ビット目を
ONにするとは
--------------------------------------------------------------
~1|1|0|0 (右から0ビット目、1ビット目、2ビット目、3ビット目)
--------------------------------------------------------------
ということを言っているのではないだろうかと思っています。)
ビットに関して私の勉強不足であることは十分に認識して
おりますが、何かヒントをいただけるとありがたく思っています。
宜しくお願いいたします。
No.1
- 回答日時:
あなたの考えていることであってますよ。
ONとは1で、OFFとは0の状態を示します。
本来、これは、単なる決め事なので、その表記を記述する場合も、
上記のことを、最初に述べるべきなのですが、
通常は、ONは1で、OFFは0で扱うのが、一般的なので、
記述されたかたは、そのことを忘れていたのかと思います。
(信号の赤は、とまれ、青は進めの決め事と同じです。
赤は、進め、青は止まれでも、決め事としては、それで
よいのですが、そうすると事故が、多くなるのでそうはしません。
同じように、ONは0で、OFFは1でもよいのですが、
通常は、そのようには、決めません)
さっそく、ご回答下さってありがとうございました。
C言語のビットの概念はある程度は学習したので、イメージとしては
わかっていたつもりでしたが、実際問題でON、OFFにするとでてきた
時に、頭の中でこんがらがってしまいました。
今後はポインタ、構造体と学習していくことになりますがじっくり
習得していきたいと思います。
No.2
- 回答日時:
Q、ON、OFFとは何を意味しているのかいっこうにわかりません?
A、ON=1、OFF=0。
服飾デザイナでプログラマじゃないので参考程度に。
まあ、昔は、スイッチってもんがあって、それをオン・オフしてビットを入力したもんです。
ですから、「ON=1、OFF=0」の理解で間違いないのじゃないですかね。
ところで、JISコード'A'を16進数で表せば 0x8260。
これをビット表現すれば、次のようです。
10000001001100000
この場合、ビットスイッチは、左からオン・オフすることはないんじゃないですか?
0 ---> 000
6 ---> 100
2 ---> 001
と、当然に数字ですから下桁から入力していきます。
普通は、下桁から意識するもんです。
/* getbits: Pの位置からnビットを取ってくる */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
「仮定としてビット位置0は右端で、nとpは意味のある正の値とする。」
(「プログラミング言語C第二版」61ページ)
私は、このように学んできました。
>変数cの2ビット目と3ビット目をONにする・・・。
しかし、XXビット目とは、明らかに左からの数え方。
解せないですね。
ご回答ありがとうございました。
C言語はメモリを意識してコーディングしなくてはいけないと
人から聞いたことがあります。なかなか、難しそうです。
ちなみに
問)int aとして変数aの2ビット目と3ビット目をONにする。
解) a = a | 0x000C;
となってました。ここでいう0x000Cとは
0000 0000 0000 1100
のことを言っていると解釈すればいいのですね。
No.3
- 回答日時:
補足:
>右から0ビット目、1ビット目、2ビット目、3ビット目
これが、昔からの数え方。
私が言いたいのは、0ビット位置と書くか、但し書きがあってしかるべきということです。
No.5ベストアンサー
- 回答日時:
>ちなみに
>問)int aとして変数aの2ビット目と3ビット目をONにする。
>解) a = a | 0x000C;
>となってました。ここでいう0x000Cとは
>0000 0000 0000 1100
>のことを言っていると解釈すればいいのですね。
質問本文、上記引用の「お礼」文、ともに質問者様の理解は正しく、
>勉強不足であることは十分に認識しております・・
とても謙虚な方ですね。
>ヒントをいただけると・・
とのこと、質問の事項は、
★「ビット論理和」といいます。他にビットに関し「論理積」、「排他的論理和」があります。
ビット論理和の式の値は、〈整数式1〉と〈整数式2〉のどちらかで1であるビットを1に、他のビットをすべて0にした整数値です。
単純に、どこどこのビットを1にしたいからと、相当するビットに1を「足して」しまうと、たまたま元のビットが0ならばいいのですが、1ならば「繰り上げ」が起こってしまいます。「論理和」には「繰り上げ」は発生しません。
(No2さんへ)
>10000001001100000
>0 ---> 000
>6 ---> 100
>2 ---> 001
年寄りの目には文字が小さく、思わずエディタにペーストして見ましたが、2進数表記1桁多すぎですよね、まっそれはいいとして、
1000001001100000 だから 1000 0010 0110 0000 で「左」から
8 ---> 1000
2 ---> 0010
6 ---> 0110
0 ---> 0000
でないと質問者様が混乱しちゃう・・・なんで2進3桁かとかも。
>普通は、下桁から意識するもんです。
そうか、だから「変数cの2ビット目と3ビット目をONにする」で通用しちゃうんだ(私は、本によりマチマチだから、その都度「どっちからだ?」と確認してたけど・・・)。
回答者様、丁寧な解説ありがとうございました。
これで問題のほうもなんとか解決できそうです。
>単純に、どこどこのビットを1にしたいからと、相当するビットに1を「足して」しまうと、たまたま元のビットが0ならばいいのですが、1ならば「繰り上げ」が起こってしまいます。
なるほど、ただ単に1を足せばいいということではないのですね!
だからONにするという処理では、ビット和を用いているのですね。
「繰り上げ」ですか....。 もう少し学習してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マウス・キーボード onまたは off で一回だけ動作するそんな都合のよいトグルスイッチなんてないですか 1 2022/08/12 16:04
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- TOEFL・TOEIC・英語検定 このwouldはどういう用法でどういう意味ですか?複合関係詞の慣用例です。 3 2022/11/02 04:56
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- 扇風機・冷風機・サーキュレーター スマートプラグで最近の扇風機は操作できない? 5 2022/11/04 13:37
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 英語 なぜ in ではなく on ですか? 5 2022/05/05 15:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
ビットシフトってどんな時使うの?
-
命令について
-
文字参照は10進数と16進数では...
-
符号無し整数xを右にnビット回転
-
エクセルVBAのIf,Then 構...
-
剰余の法が大きい場合のアルゴ...
-
コンピュータが処理できるビッ...
-
浮動小数点演算と固定小数点演...
-
if($a & $b) の意味
-
03分22秒36のような時間の単位...
-
アセンブリの論理演算命令のCPL...
-
浮動小数点数の内部表現につい...
-
整数除算の意味とは?
-
アルゴリズムの計算量とオーダ
-
アセンブリ言語の質問のコト
-
算術右シフトの結果が1/2になる...
-
シーケンサで時間計算
-
三菱PLCについて聞きたいです。...
-
ものづくりに向いているプログ...
マンスリーランキングこのカテゴリの人気マンスリー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"は、...
おすすめ情報