構造化プログラミング、n進数
6月も第2週に突入〜。
昨日は真夏のような暑さでしたが、今日はなんだか寒かったです。
天気もあまり良くないようで、梅雨が始まりつつあるのかなぁと感じております。
今年もどこかに、紫陽花でも見に行こうか考え中です。
本日のメニュー
■構造化プログラミング
■n進数
■構造化プログラミング
□構造化
可読性が高い→読みやすい、インデント、スペース、改行など人が読みやすいかどうか
保守性が高い→他の人にもやれるか、メンテしやすいか、変更を加えてバグが起きないか
繰り返しが少ない→同じこと繰り返してないか
□関数化の手順
1、名前の定義
目的に沿っているか
2、引数(IN)の確認
必要性の確認
3、戻り値(OUT)の確認
目的を満たしているか
□実際にどうやってやっていくか
1、共通部分を探す
•繰り返し
•他でも使えそうなところ
→functionにしてみる
※functionにできるかどうかの見極め
(functionは戻り値が1個だけ、ということに注目)
本日はここまで…。
■n進数
□n進数とは
n進数とは、各桁にn種類の数字(文字)を用いる数の形式。
※10、2、16、8進数などがある。
□なぜ2進数が使われるか
2値の表現の「0」[1」は、電圧の高い低いという電気信号に容易に置き換えられる。
雑音や外的環境の変動に対してもっとも影響を受けにくい。
□2進数から10進数
1001 →23×1+22×0+21×0+20×1
→9
□16進数から10進数
FE →161×15+160×14
→254
□10進数から2進数
8 →8÷2=4…0
→4÷2=2…0
→2÷2=1…0
→1÷2=0…1
→1000(2進数)
割り切れなくなるまで、2でわる、
その余りを下から並べたものが答えになります
□10進数から16進数
77 →77÷16=4…13
→4÷16=0…4
→4、13
→4C(13は16進数でいうCなので)
□ビットをたてるとは
例)3ビット目をたてる→3桁目を1にするということ
例)1000→2ビット目をたてる→1010
例)パーミッション
□負の2進数。2の補数。
一番左のビットをたてるとマイナスになる。
もし8ビットで考えた場合
11111111
これを10進数になおすと−1になります。
一番左のビットがたっているので
これはマイナスの値になり、
10000000は−128
1111111は+127
よって−1になります。
□ビット演算子
1、AND:& 両方のビットがたっていたら、ビットをたてる
2、OR :| どちらか一つでもビットがたっていたら、ビットをたてる
3、XOR:^ どちらか一方のビットがたっていたら、ビットをたてる
4、否定:〜 逆
□課題
1)3ビット目をたてる関数を作ろう
2)8ビット目をたてる関数を作ろう
3)2つの値のANDを2進数で返す関数を作ろう
4)IPアドレス127.0.0.1で与えると、2進数とか16進数になる関数を作ろう
$a = 12; $b = 9; $c = 8; $d = 256; $ip = "127.0.0.1"; //1)3bit目をたてる関数 function setup_3bit($c) { $up = 4;//2進数で100 $ans = $c | $up; return $ans; } echo setup_3bit($c)."\n"; //2)8ビット目をたてる関数 function setup_8bit($d) { $up = 128; $ans = $d | $up; return $ans; } echo setup_8bit($d)."\n"; //3)2つの値をANDを2進数で返す function setup_and($a,$b) { $ans = $a&$b; $ans10 = base_convert($ans,10,2);//10進数を2進数に変換 return $ans10; } echo setup_and($a,$b)."\n"; //4)IPアドレス127.0.0.1を与えると2進数とか16進数になる function change_addr($ip) { $ip_array = explode(".",$ip); foreach ($ip_array as $ans){ $ans2_array[] = sprintf("%08b",$ans);//2進数変換0詰め $ans16_array[] = sprintf("%02x",$ans);//16進数変換0詰め } $chage_ans2 = implode(".",$ans2_array); $chage_ans16 = implode(".",$ans16_array); $ansers = "2進数:".$chage_ans2."\n16進数:".$chage_ans16."\n"; return $ansers; } echo change_addr($ip); ?>