- ベストアンサー
バイナリカウンタの仕組みについて教えていただけないでしょうか。
バイナリカウンタの仕組みについて教えていただけないでしょうか。 なぜバイナリカウンタは足し算ができるのですか? JK-FFを使ったカウンタなのですが、どうも理解できません。Webで調べても動作についての記述はあるのですが、仕組みについて載っているところが見つからず困っています。 どなたかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「1を足すとどうなるか」を、まずは10進数で考えてみましょう。 とりあえず2桁で。 00に1を足すと01、01に1を足すと02、…08に1を足すと09、と、00~08については、下の桁だけが変化し、上の桁は変化しません。 これは、10~18、20~28、…、90~98、などでも同じ。下の桁が0~8については下の桁でけで「1を足す」という処理が完結します。 一方、09に1を足すと10、19に1を足すと20、29に1を足すと30、…と、下の桁が9だった場合には、くり上がりが起きるので、「下の桁は9から0になる」「上の桁は1を足す」ことになります。 これを一般化して説明すると、一番下の桁からスタートして、 ・対象の桁が0~8の時は、くり上がりが起きないので、この桁に1を足して処理は終了 ・対象の桁が9の時は、くり上がりが起きるので、一つ上の桁を対象とした「1を足す」処理を行うことにする の繰り返しを、くり上がりがなくなるまで、上の桁まで続けることになります。 (スポーツとかでよくある、めくる形のスコアボードで、1づつ増やしていく時の操作を想像すればわかりやすいかと思います。) 以上が10進数での説明でしたが、2進数でも基本は同じです。ですが、2進数の場合、 ・00に1を足すと 01になる。下の桁が0のときは、1を足してもくり上がりは起きない。 ・01に1を足すと、10になる。下の桁が1のときは、1を足すとくり上がりが起きる。 といった形で、ある桁での取り扱いは2通りしかありません。 これを上述のような一般化すると、各桁の処理は、 ・対象の桁が0の時は、くり上がりが起きないので、この桁に1を足して処理は終了 ・対象の桁が1の時は、くり上がりが起きるので、一つ上の桁を対象とした「1を足す」処理に入る ことになります。さらに、桁内の処理は、0→1と1→0なので、 ・1を足す時は、ビットを反転させる ・元の値が1の時は、その上の桁を「1を足す」ことにする ことになります。 これをそのまま、FFで実現すると、T-FFによる非同期カウンタになります。 (T-FFは、入力TがLからHになったときに出力が反転します。それはすなわち「1を足す時は、ビットを反転させる」の処理になります。TがLからHになるのが「1を足す」指示。 そして、各桁のQ#を一つ上の桁のTに入れれば、QがHからLになったときQ#がLからHになりますから「元の値が1の時は、その上の桁を「1を足す」ことにする」という接続になります。 そして、一番下の桁のTをいれると全体で1ずつ増えるカウンタになります。 T-FFはJK-FFで実現できますから、それが質問者さんの考えているJK-FFを使ったカウンタになるかと思います。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
「足し算」とはどういうことでしょうか? バイナリカウンタはただのカウンタであって, 一般的な「足し算」はできないと思うのですが.
補足
すいません、言葉を選び間違いました。 カウンタの仕組みが知りたいのです。よろしくお願いします。
お礼
丁寧な解説ありがとうございました。 やっと理解できました!