- ベストアンサー
加算するとはどういうことですか?
加算するとはどういうことですか? 例えば、1111と1101を加算した場合の結果は どうなるのでしょうか? それから、普通C言語でLEDを光らせたい場合、0b11111111とかいうふうにプログラムを記述すると思うのですが、加算する場合どういうふうに プログラムを記述すればよいのでしょうか? 0b11111111+0b11110000とかやっても加算した値はでてきませんし。 初心者ですいません。 教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
一般的な数学の加算なら 1111(15)と1101(13)なら11100(28)になると思います … 下位4ビットでオーバーフローを考慮しないなら1100(12)になるともいます ポートから読み込んだデータをそのまま加算するといったぐあいかと int pa, pb, pc; pa = input_a( portA ); pb = input_b( portB ); pc = pa + pb; // 下位4ビットのマスクをするなら // pc &= 0x0F; output_c( pc ); PICは詳しくないのであしからず …
その他の回答 (5)
- arain
- ベストアンサー率27% (292/1049)
進展がないようなので一言だけ。 http://okwave.jp/qa4293166.html の続き、というかNo.1での私の回答による疑問なんだろうけど、 単純に「加算」とあっても解釈の幅が広いのはすでに他の人の回答にあるとおり。 気になっているのは、 http://okwave.jp/qa4293166.html より --------------------- C言語を使ってLEDを点灯させるプログラムです。 以下のプログラムを変更して、Aポートの入力(下位4ビット) と、Cポートの入力(下位4ビット)を『加算した値』をBポートに出力しなさい 。 という『問題』なのですが(以下略) --------------------- 学校の宿題か何かでしょうか? 問題作成者に「加算」の意味を聞かなければ、いくらここで質問しても考えられる意味について回答されるばかりで、正解には辿りつけません。 前述の質問の解釈も、 ・A/Cポートに接続されたロータリースイッチ等で二つの数値を取得し、合計値をBポートに出力する。 ・A/Cポートに接続されたディップスイッチのビット入力を取得し、同じ位置のビットのどちらかがONなら、対応するBポートのLEDを出力する とか、文面からだといろいろと推測できるから。 Bポートへの出力も、単純なビット対応のLEDだったり、7セグメントLEDだったりいろいろと考えられる。 ちなみに、 >普通C言語でLEDを光らせたい場合、0b11111111とかいうふうにプログラムを記述すると思うのですが も回答にあるとおり、普通のC/C++ではできません。 (ビット演算用に#defineで定義されてるとかならともかく←自作定義経験あり)
- jacta
- ベストアンサー率26% (845/3158)
> 0b11111111とかいうふうにプログラムを記述すると思うのですが、 そんな記法はありません。
- don_go
- ベストアンサー率31% (336/1059)
「加算」ではなくて「論理和」ではないですか? http://www.asahi-net.or.jp/~ax2s-kmtn/ref/logicope.html 論理演算 論理和(OR)
- JaritenCat
- ベストアンサー率37% (122/322)
PICでLEDを光らせる話だと思いますが、普通のC言語では2進数の記述もポートの入出力もありません。 ご使用のコンパイラが何か分かりませんが、ネットで検索すれば参考になるソースが出てくるのではないでしょうか。 流れとしては、こんな感じでしょう。 ・整数型の変数a,b,cを宣言する ・ポートA,B,Cの入出力を設定する ・ポートAを読んで下位4ビットを変数aにいれる ・ポートCを読んで下位4ビットを変数cにいれる ・変数a+変数cを計算して変数bにいれる ・ポートBに変数bの内容を書き込む
- kyaratsuki
- ベストアンサー率0% (0/2)
後半部分はちょっと分からないのでとりあえず前半だけ。 加算するとは文字通り、足し算することです。 1111とか1101ということは2進法でしょうか?一応下に2進法の計算を示します。 1111 + 1101 ------ 11100 となります。 一般的である10進法との違いは、通常だと10で1繰り上がるところを2で1繰り上げます。 なので、 一桁目:1+1=2から、1繰り上がってこの位には0 二桁目:1繰り上がってるので1+1+0=2でまた1繰り上がって0をいれる 三桁目:1+1+1から3になり、1繰り上がって1余るので、1を入れる ・・・ といった感じです。 ちなみに11111111+11110000=111101111だとおもいます。 補数などを考えるとまた違ってくるかもしれないので、二進法で調べることをお勧めします。