○○進数の意味がいまいちわかりません・・・
○○進数の意味がいまいちわかりません・・・
**学習単元**
ttp://www9.plala.or.jp/sgwr-t/
上記URLサイトの"データの扱い、定数"の欄です。
基礎中の基礎なので、本題の言いたいことはわかるのですが…
**質問**
・○○進数(8進数,10進数など)という文字が出てきたのですが、意味がわかりません
**自分で調べた結果**
8進数について調べたら以下のように表記されていました。
基数を8とした数値の表現方法。桁が一つ移動する毎に値の重みが8倍(1/8倍)になる。「0」から「7」までの8種類の数字を用いてすべての数を表現する。2進数での3桁をまとめて8進数として表すことがある。8進数の「537」は、10進数では 5×64 + 3×8 + 7×1 の351である。
基数という言葉の意味すらわからなかったので基数と調べたらこう表記されていました。
数値を表現する際に、各桁の重み付けの基本となる数。我々が普段している10進数では、10倍ごとに桁が上がっていくので、基数は10である。2進数、8進数、10進数、16進数の基数はそれぞれ2、8、10、16である。一般に、n進数では、ある位の1つ上の位の数はn倍の数を表す。例えば、10進数では右から順に「1の位」「10の位」「100の位」…のようになるが、これが16進数になると「1の位」「16の位」「256の位」…のようになる。
自分が思うにつまり、10進数の場合10を十倍すると100、100を十倍すると1000になる。
十倍の関係にあるから10進数? … 必死に考えてるのですがいまいち・・・;
これを8進数で表すと、8で数字が繰り上がるという考え方でいいのでしょうか。
1~8の数字を扱って考えるということなのでしょうか。
どうか教えてくださると幸いです。お願いします
ttp://www9.plala.or.jp/sgwr-t/
上記URLサイトの"データの扱い、定数"の欄です。
基礎中の基礎なので、本題の言いたいことはわかるのですが…
**質問**
・○○進数(8進数,10進数など)という文字が出てきたのですが、意味がわかりません
**自分で調べた結果**
8進数について調べたら以下のように表記されていました。
基数を8とした数値の表現方法。桁が一つ移動する毎に値の重みが8倍(1/8倍)になる。「0」から「7」までの8種類の数字を用いてすべての数を表現する。2進数での3桁をまとめて8進数として表すことがある。8進数の「537」は、10進数では 5×64 + 3×8 + 7×1 の351である。
基数という言葉の意味すらわからなかったので基数と調べたらこう表記されていました。
数値を表現する際に、各桁の重み付けの基本となる数。我々が普段している10進数では、10倍ごとに桁が上がっていくので、基数は10である。2進数、8進数、10進数、16進数の基数はそれぞれ2、8、10、16である。一般に、n進数では、ある位の1つ上の位の数はn倍の数を表す。例えば、10進数では右から順に「1の位」「10の位」「100の位」…のようになるが、これが16進数になると「1の位」「16の位」「256の位」…のようになる。
自分が思うにつまり、10進数の場合10を十倍すると100、100を十倍すると1000になる。
十倍の関係にあるから10進数? … 必死に考えてるのですがいまいち・・・;
これを8進数で表すと、8で数字が繰り上がるという考え方でいいのでしょうか。
1~8の数字を扱って考えるということなのでしょうか。
どうか教えてくださると幸いです。お願いします
Re:○○進数の意味がいまいちわかりません・・・
>これを8進数で表すと、8で数字が繰り上がるという考え方でいいのでしょうか。
その考えであってます。
>1~8の数字を扱って考えるということなのでしょうか。
0~7です。
その考えであってます。
>1~8の数字を扱って考えるということなのでしょうか。
0~7です。
Re:○○進数の意味がいまいちわかりません・・・
プログラムでよく扱う進数表記は 2, 8, 10, 16 です。
0~16までの数値の各表記を下記に表で示してみます。
一桁で表すことのできる数です。
※ちなみにですが、時計の時間の数え方は12(24)進数と60進数で表しています。
0~16までの数値の各表記を下記に表で示してみます。
--------------------------- |2進数|8進数|10進数|16進数| --------------------------- | 0| 0| 0| 0| | 1| 1| 1| 1| | 10| 2| 2| 2| | 11| 3| 3| 3| | 100| 4| 4| 4| | 101| 5| 5| 5| | 110| 6| 6| 6| | 111| 7| 7| 7| | 1000| 10| 8| 8| | 1001| 11| 9| 9| | 1010| 12| 10| A| | 1011| 13| 11| B| | 1100| 14| 12| C| | 1101| 15| 13| D| | 1110| 16| 14| E| | 1111| 17| 15| F| |10000| 20| 16| 10| ---------------------------表を見ると分かるとおり、○○進数の○○の部分が、
一桁で表すことのできる数です。
※ちなみにですが、時計の時間の数え方は12(24)進数と60進数で表しています。
Re:○○進数の意味がいまいちわかりません・・・
■non様
■御津凪様
なるほど!なんかわかった気がします。
確認のために御津凪様の書いてくださった8進数の数値の続きを書いて見ます。
20から書きます。
21
22
23
24
25
26
27
30
31
.
.
.
66
67(67から70になるのは、68の8は使えなくて、9も使えないから繰り上がるのですよね?
70
71
72
73
74
75
76
77
100(77から99まではいずれにしても十の位、一の位に8以上の値が入ってしまうた100
こんな考え方でよろしいでしょうか。
皆様詳しい説明有難うございます。さーっぱり理解できなかったのに理解できそうです^^
■御津凪様
なるほど!なんかわかった気がします。
確認のために御津凪様の書いてくださった8進数の数値の続きを書いて見ます。
20から書きます。
21
22
23
24
25
26
27
30
31
.
.
.
66
67(67から70になるのは、68の8は使えなくて、9も使えないから繰り上がるのですよね?
70
71
72
73
74
75
76
77
100(77から99まではいずれにしても十の位、一の位に8以上の値が入ってしまうた100
こんな考え方でよろしいでしょうか。
皆様詳しい説明有難うございます。さーっぱり理解できなかったのに理解できそうです^^
Re:○○進数の意味がいまいちわかりません・・・
>こんな考え方でよろしいでしょうか。
考え方は少し違いますが合っていますよ。
8進数では8,9は使えないのではなく存在しないのです。
言いたいことほとんど書かれてしまいましたが
人間は指が10本だからか10進数ですが
コンピュータは2進数です。0と1しか分かりません。
8進数や16進数を使うのは2進数と相性がいいからです。
御津凪さんが書いてくださった
16進数、8進数と2進数の対応を見れば分かりますか?
正直使わなくてもなんとかなりますが、
マニアな方だと16進数でプログラムを書くので
それを読もうとするとさっぱりになります。
特にアセンブラのプログラムを書く人はそうですね。
追加。
8進数は2進数3つごと、16進数は4つごとになります。
コンピュータが
000101011111
と結果を出したら
8進数は
000 101 011 111 で
0537となります。
16進数は
0001 0101 1111 で
15Fとなります。
10進数は相性が悪いので計算が面倒ですが351ですね。
逆を言うと16進数や8進数で書けばメモリが無駄なく使えるってことですね。
Windowsならアクセサリにある電卓で表示・関数電卓を選ぶと
2進数、8進数、16進数が使えるので遊んでみると良いかも。
考え方は少し違いますが合っていますよ。
8進数では8,9は使えないのではなく存在しないのです。
言いたいことほとんど書かれてしまいましたが
人間は指が10本だからか10進数ですが
コンピュータは2進数です。0と1しか分かりません。
8進数や16進数を使うのは2進数と相性がいいからです。
御津凪さんが書いてくださった
16進数、8進数と2進数の対応を見れば分かりますか?
正直使わなくてもなんとかなりますが、
マニアな方だと16進数でプログラムを書くので
それを読もうとするとさっぱりになります。
特にアセンブラのプログラムを書く人はそうですね。
追加。
8進数は2進数3つごと、16進数は4つごとになります。
コンピュータが
000101011111
と結果を出したら
8進数は
000 101 011 111 で
0537となります。
16進数は
0001 0101 1111 で
15Fとなります。
10進数は相性が悪いので計算が面倒ですが351ですね。
逆を言うと16進数や8進数で書けばメモリが無駄なく使えるってことですね。
Windowsならアクセサリにある電卓で表示・関数電卓を選ぶと
2進数、8進数、16進数が使えるので遊んでみると良いかも。
Re:○○進数の意味がいまいちわかりません・・・
■hss12様
なるほど…
存在しないのですね… 片手で数字を数えようとしたら片手では5までしか考えられないから左手に1繰り上げるという考え方ですね。
8進数と16進数の相性がいいのはみてとれました^^
途中に16進数だと文字が使われているのがなぜかわかりませんが、数字がなんか相性がいいのはわかりました。
アンセンブラ… 懐かしいです;
僕が中学1年のときくらいにyah○o知恵袋というサイトで
「ゲームってどうやってできてるのですか? C言語だけでできてるのですか? 画像や音声の処理はどうやってるのでしょうか、プログラムで画像も作られてるのですか?」
とか馬鹿みたいなことを質問してたときにアンセンブラを進められたことがあります。
かなり多数の方がやりなといってましたがねw
あんせんぶら?!!!wwwwみたいになって結局C言語やってますがw
アンセンブラって今後にわたってお世話になるものなのでしょうかね?
なるほど…
存在しないのですね… 片手で数字を数えようとしたら片手では5までしか考えられないから左手に1繰り上げるという考え方ですね。
8進数と16進数の相性がいいのはみてとれました^^
途中に16進数だと文字が使われているのがなぜかわかりませんが、数字がなんか相性がいいのはわかりました。
アンセンブラ… 懐かしいです;
僕が中学1年のときくらいにyah○o知恵袋というサイトで
「ゲームってどうやってできてるのですか? C言語だけでできてるのですか? 画像や音声の処理はどうやってるのでしょうか、プログラムで画像も作られてるのですか?」
とか馬鹿みたいなことを質問してたときにアンセンブラを進められたことがあります。
かなり多数の方がやりなといってましたがねw
あんせんぶら?!!!wwwwみたいになって結局C言語やってますがw
アンセンブラって今後にわたってお世話になるものなのでしょうかね?
Re:○○進数の意味がいまいちわかりません・・・
語弊はあるかと思いますが、
アセンブラはC言語の元となっているような言語です。
コンパイルの段階で、C,C++のコードはアセンブラに訳されます。
アセンブラはかなり機械語に近い言語で、
言語の速度はC言語よりも速いです。
ただし、かなり難しい言語としても有名で、
効率の面から見ても、アセンブラがゲーム開発に使われることは少ないでしょう。
ただ、アセンブラは直接メモリを弄ることになるので、
アセンブラをやっていると、ポインタをすぐ理解できるといわれています。
その面から、アセンブラはやっておくべき言語なのかもしれません。
(間違っているかもしれないので、そのまま鵜呑みにしないほうがいいです)
アセンブラはC言語の元となっているような言語です。
コンパイルの段階で、C,C++のコードはアセンブラに訳されます。
アセンブラはかなり機械語に近い言語で、
言語の速度はC言語よりも速いです。
ただし、かなり難しい言語としても有名で、
効率の面から見ても、アセンブラがゲーム開発に使われることは少ないでしょう。
ただ、アセンブラは直接メモリを弄ることになるので、
アセンブラをやっていると、ポインタをすぐ理解できるといわれています。
その面から、アセンブラはやっておくべき言語なのかもしれません。
(間違っているかもしれないので、そのまま鵜呑みにしないほうがいいです)
Re:○○進数の意味がいまいちわかりません・・・
追加したので見てください。
アセンブラを勉強するとプログラムの仕組みが良くわかるのでいいですよ。
最近はC++がほとんどだと思いますが
ファミコンのころはアセンブラで書いていたんじゃないですかね。
昔、少しやりましたが、計算結果が16進数で帰ってくるので苦労しました。
メモリを直接操作するので計算が無駄なくすごく速いです。
書くのは難しいですが、今でも軽さや処理速度を重視するときは使われていますね。
アセンブラを勉強するとプログラムの仕組みが良くわかるのでいいですよ。
最近はC++がほとんどだと思いますが
ファミコンのころはアセンブラで書いていたんじゃないですかね。
昔、少しやりましたが、計算結果が16進数で帰ってくるので苦労しました。
メモリを直接操作するので計算が無駄なくすごく速いです。
書くのは難しいですが、今でも軽さや処理速度を重視するときは使われていますね。
Re:○○進数の意味がいまいちわかりません・・・
■MNS様
なるほど…
初めて知りました。
そしてアンセンブラをやらなくてよかったなとおもいました^^ww
C言語でもう十分すぎます…w
なるほどぉ… ポインタはC言語最大の難関ですからね;
それを理解しやすくなるのはうらやましいですがそれまでの道のりが大変そうですね^^;
時期にポインタの単元に突入するべくがんばりたいとおもいます
たくさんの回答有難うございました
なるほど…
初めて知りました。
そしてアンセンブラをやらなくてよかったなとおもいました^^ww
C言語でもう十分すぎます…w
なるほどぉ… ポインタはC言語最大の難関ですからね;
それを理解しやすくなるのはうらやましいですがそれまでの道のりが大変そうですね^^;
時期にポインタの単元に突入するべくがんばりたいとおもいます
たくさんの回答有難うございました
Re:○○進数の意味がいまいちわかりません・・・
時間もそうでしたが、お札のナンバリングもこのように進数表記を使ってますね。
(たしか数字に似ているI(アイ)とO(オー)を抜いた大英字と数字、あわせて34進数表記だったかな?)
身近な雑学としてどうぞ。
(たしか数字に似ているI(アイ)とO(オー)を抜いた大英字と数字、あわせて34進数表記だったかな?)
身近な雑学としてどうぞ。
Re:○○進数の意味がいまいちわかりません・・・
アセンブリ言語だと、(処理)スピード調整がしやすいですね。
というのもC言語はコンパイルにかけると機械語に翻訳されるのはご存知だと思いますが、
実はその間に「アセンブリ言語」に一度訳されていて、
それをもとに機械語に翻訳されています。
このとき、自分でアセンブリ言語には訳していませんよね?
コンパイラによって自動で訳されています。
なので、処理時間を調整することが難しいです。
まぁ、コンパイラで最適化はされていますが^^;
一方、アセンブリ言語は、メモリを直接操作して(?)、
実行する手順を完全に制御できたりと、リアルタイム処理には長けているそうです。
なので、リアルタイム処理が必要なもの、組み込み系にはまだアセンブリ言語で
プログラムを書かれていることあるです。
ですが、アセンブリ言語は難しい言語です。
理由は、機械語をシンボル化したようなものなので、
人間にとってはまだまだ分かりづらい言語だからです。
また、CやC++のような高級言語よりも書く量が半端じゃありません。
たとえば、1+2+3+…+10の計算をする処理を考えてみると、
C言語であればfor文で1発で書くことができます。
しかし、アセンブリ言語で書こうとするならば、
10行ほど必要になってきます。
このように一般的にはC言語の10倍書く量があります。(聞いた話なので定かではありません^^;
生産性を上げるためにほとんどはC言語のような高級言語が使用されています。
なので、アセンブリ言語はあまりお世話にならないかもしれませんね。
将来、組み込み系の仕事に就くのであれば、必要になってくるかもしれませんが、
最近のコンパイラでも処理時間が早くなるようになってきてるそうです。
間違っているかもしれないので、すべてを鵜呑みにしないでくださいね^^;
というのもC言語はコンパイルにかけると機械語に翻訳されるのはご存知だと思いますが、
実はその間に「アセンブリ言語」に一度訳されていて、
それをもとに機械語に翻訳されています。
このとき、自分でアセンブリ言語には訳していませんよね?
コンパイラによって自動で訳されています。
なので、処理時間を調整することが難しいです。
まぁ、コンパイラで最適化はされていますが^^;
一方、アセンブリ言語は、メモリを直接操作して(?)、
実行する手順を完全に制御できたりと、リアルタイム処理には長けているそうです。
なので、リアルタイム処理が必要なもの、組み込み系にはまだアセンブリ言語で
プログラムを書かれていることあるです。
ですが、アセンブリ言語は難しい言語です。
理由は、機械語をシンボル化したようなものなので、
人間にとってはまだまだ分かりづらい言語だからです。
また、CやC++のような高級言語よりも書く量が半端じゃありません。
たとえば、1+2+3+…+10の計算をする処理を考えてみると、
C言語であればfor文で1発で書くことができます。
しかし、アセンブリ言語で書こうとするならば、
10行ほど必要になってきます。
このように一般的にはC言語の10倍書く量があります。(聞いた話なので定かではありません^^;
生産性を上げるためにほとんどはC言語のような高級言語が使用されています。
なので、アセンブリ言語はあまりお世話にならないかもしれませんね。
将来、組み込み系の仕事に就くのであれば、必要になってくるかもしれませんが、
最近のコンパイラでも処理時間が早くなるようになってきてるそうです。
間違っているかもしれないので、すべてを鵜呑みにしないでくださいね^^;
Re:○○進数の意味がいまいちわかりません・・・
たしかにアセンブラにfor文はないですね。
>たとえば、1+2+3+…+10の計算をする処理を考えてみると
i=1なんてことはできなかったと思うので
たしかメモリを0にしてから1を足さないとダメだったはずです。
あとメモリとメモリの比較しかできないので
どこかのメモリに10をいれておかないとダメです。
計算用のメモリと保存用のメモリを分けないといけないので
最後にa=jとしないと消えてしまいます。
面倒ですね。
>たとえば、1+2+3+…+10の計算をする処理を考えてみると
for(a=0, i=1; i=<10; i++) a+=i;これをアセンブラ風にC言語で書くと
i=0; j=0; k=10; LABEL1: i++; if (i>k) goto LABEL2; j+=i; goto LABEL1; LABEL2: a=j;BASICみたいになってしまいましたが確かに10行くらいになりますね。
i=1なんてことはできなかったと思うので
たしかメモリを0にしてから1を足さないとダメだったはずです。
あとメモリとメモリの比較しかできないので
どこかのメモリに10をいれておかないとダメです。
計算用のメモリと保存用のメモリを分けないといけないので
最後にa=jとしないと消えてしまいます。
面倒ですね。
Re:○○進数の意味がいまいちわかりません・・・
アーキテクチャにもよりますが...
> たしかメモリを0にしてから1を足さないとダメだったはずです。
そんなことはありません。
> あとメモリとメモリの比較しかできないので
そんなことはありません。
> 計算用のメモリと保存用のメモリを分けないといけないので
そんなことはありません。
> for(a=0, i=1; i=<10; i++) a+=i;
は、
なお、アセンブリ言語はそんなに難しい言語ではありません。
多くの場合、C言語より簡単です。
ただし、面倒です。
ところで、アセンブリ言語は将来にわたって使われなくなることはありません。
さすがにアセンブリ言語だけでプログラム全体を書くことはあまりなくなりました(4ビットマイコンやPICのようなローエンドの機種では、今でもアセンブリ言語だけで記述することがあるはずです)が、スタートアップやOSなどのコードを書くにはアセンブリ言語が必須です。
つまり、ある程度以上のレベルに達するには、アセンブリ言語のスキルは必須になります。
> たしかメモリを0にしてから1を足さないとダメだったはずです。
そんなことはありません。
> あとメモリとメモリの比較しかできないので
そんなことはありません。
> 計算用のメモリと保存用のメモリを分けないといけないので
そんなことはありません。
> for(a=0, i=1; i=<10; i++) a+=i;
は、
a = 0 i = 0 goto L2 L1: a += i ++i L2: if (i <= 10) goto L1のようになります。1行に1命令しか書けないので行数は増えますが、大したことはありません。
なお、アセンブリ言語はそんなに難しい言語ではありません。
多くの場合、C言語より簡単です。
ただし、面倒です。
ところで、アセンブリ言語は将来にわたって使われなくなることはありません。
さすがにアセンブリ言語だけでプログラム全体を書くことはあまりなくなりました(4ビットマイコンやPICのようなローエンドの機種では、今でもアセンブリ言語だけで記述することがあるはずです)が、スタートアップやOSなどのコードを書くにはアセンブリ言語が必須です。
つまり、ある程度以上のレベルに達するには、アセンブリ言語のスキルは必須になります。
Re:○○進数の意味がいまいちわかりません・・・
指摘補足ありがとうございます。
ぜんぜん理解していなかったみたいですね。
いいかげんなことは書くべきじゃないですね。
アセンブラまた勉強してみようかな。。。
ぜんぜん理解していなかったみたいですね。
いいかげんなことは書くべきじゃないですね。
アセンブラまた勉強してみようかな。。。