コンピュータの数値表現と文字コード
1. *実習課題の提出について
•
指示:
• 実習の例を参考にして
• Juliaへの指令はコピペではなく、
• 成功した指令と出力をコピペで Word に貼り付ける。
• 各項目の入力と出力を 1つの Word ファイル (.docx) にまとめて提出してください。
• 形式は自由。
• 例は こちら
2. Decimal 10進法
10 を底(てい)とする。
• 例:1, 2, 3, ... 10, 11, ...20, 21...

3. Binary number 2進法
2 を底(てい)とする。
• 例:1, 10, 11, 100 ...
• デジタル機器に使われている。

Binary to decimal conversion 2進数から10進数へ変換:

• Other examples:

*実習:Binary to decimal
► Int は Integer 整数の省略です。
► 括弧に任意の2進数をいれる。
► 2進数は
julia> Int(0b1111 )
15
4. Hexadecimal number 16進法
16 を底(てい)とする。
• 例:1, 2, 3, ...9, A, B, ...F, 10, 11...1F

Binary to Hexadecimal conversion 2進数を16進数へ変換:

*実習:Hexadecimal-Binary-decimal の変換
Bin to Hex 2進数から16進数へ
► 16進数は
► 2進数は
julia> 0b101011
0x2 b
Hex to decimal 16進数から10進数へ
►
► Int は Integer 整数の省略です。
► 括弧に任意の16進数をいれる。
julia> Int(0x9 )
9
julia> Int(0x10 )
16
julia> Int(0 xa)
10
julia> Int(0 xff)
255
Dec to hex 10進数から16進数へ
►
► UInt は Unsigned Integer 符号なし整数 の省略です。
► 括弧に任意の16進数をいれる。
julia> UInt(10 )
0x000000000000000 a
julia> UInt(17 )
0x0000000000000011
5. Byte バイト
データ量の単位です。
1 byte, もしくは 1 B は
例:

Unit 単位:

単位の prefix 接頭辞:
pico, nano, micro, mili, kilo, Mega, Giga, Tera, Peta
*実習:
• 4 GB は何 byte ですか?
julia> 4 * 2^10 * 2^10 * 2^10
4294967296
• 1 TB は何 byte ですか?
julia> #自分でやってください。
6. Integer & Unsigned Integer 整数と符号なり整数
• 整数: ... -2, -1, 0 , 1, 2, ...
• 符号なし整数: 0 , 1, 2, ...
8 bit (1 Byte)で 符号あし整数を表せる

8 bit (1 Byte)で 整数を表せる
• Two's complement と One's complement という方法があります。
One's complement の場合:

• 現代のパソコンは Two's complementを使っている。
Two's complementの場合、正と負の整数の範囲は:

*実習:64-bit の整数
パソコンによりますが、64 bit の OSでは デフォルトでは 64-bitで整数を表す。
julia> 2^60 #余裕
1152921504606846976
julia> -2^63 #最小値
-9223372036854775808
julia> 2^63 - 1 #最大値
9223372036854775807
julia> 2^63 + 1 #最大値に1を足してみる
-9223372036854775807
julia> 2^64
0
*実習:桁の大きい数値の演算には浮動小数点数を使う
浮動小数点数 Floating point は: 1.0, 2.12, -4.89 など
julia> 2.0 ^64
1.8446744073709552 e19
julia> 2.0 ^1000
1.0715086071862673 e301
*実習:どうしても整数を使いたい場合
数値を
julia> big(2 )^64
18446744073709551616
julia> big(2 )^1000 #自分でやってください
7. ASCII アスキー
• コンピュータなどの機器の通信、情報交換に使われいるラテン文字コード。
• 1文字のメモリサイズは1 byte です。
• 1文字を 1 byte の中の 7 bitsで表す
• 数: 2^7 = 128
• 最初の32個と最後の 7F はモニターの制御 (New line, Del, etc.)に使われる。表示はしない。
ASCII 表:

*実習
• Char は 文字 character の省略です。
julia> Char(65 )
'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
julia> Char(97 )
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
ASCII 文字から10進数に:
julia> Int('a')
97
ASCII 文字から8-bit(1Byte)の16進数に:
julia> UInt8('a')
0x61
十六進法とASCII を用いた宇宙の通信法(映画のシン)
• 映画 The Martian (オデッセイ):
• 火星に一人置き去りにされた宇宙飛行士の生存をかけた孤独な奮闘と、彼を救いだそうとする周囲の努力を。。。Wikipedia
8. Unicode ユニコード

• 各国、メーカーは独自の文字コードを使います。
► 例:日本:Shift-JIS, EUC-JP
► 他の国、メーカとの互換性がなかった。
• Unicode ユニコード(統一された文字コード)
► 全世界の文字を 最大 4 bytes で表す
► 1996年規格:収録できるの符号空間:
収録できるの符号の数を計算してみましょう:
julia> Int(0x10 FFFF)
1114111
• 現在(2020年3月)収録したは 143,859 個です
ある小学生漢字辞書(三省堂)

収録した文字の例:

練習:Unicodeで世界の文字を出力してみる
julia> Char(0x5 e1d)
'帝': Unicode U+5E1 D (category Lo: Letter, other)
julia> Char(0x1 f600)
'😀': Unicode U+1F600 (category So: Symbol, other)
julia> Char(0x2192 )
'→': Unicode U+2192 (category Sm: Symbol, math)
julia> Char(0x03 a9)
'Ω': Unicode U+03A9 (category Lu: Letter, uppercase)
julia> Char(0x0636 ) #アラビア語
'ض': Unicode U+0636 (category Lo: Letter, other)
パソコンとOSによって、実際の表示が異なる、または表示できない場合があります。
*実習:Unicodeで世界の文字を出力してみる
一行のコマンドで Unicode を連続的に出力する。
julia> [Char(0x5 e1d + n) for n=0:9 ] #原点と n を変えてみる
10 -element Array{Char,1 }:
'帝': Unicode U+5E1 D (category Lo: Letter, other)
'帞': Unicode U+5E1 E (category Lo: Letter, other)
'帟': Unicode U+5E1 F (category Lo: Letter, other)
'帠': Unicode U+5E20 (category Lo: Letter, other)
'帡': Unicode U+5E21 (category Lo: Letter, other)
'帢': Unicode U+5E22 (category Lo: Letter, other)
'帣': Unicode U+5E23 (category Lo: Letter, other)
'帤': Unicode U+5E24 (category Lo: Letter, other)
'帥': Unicode U+5E25 (category Lo: Letter, other)
'带': Unicode U+5E26 (category Lo: Letter, other)
9. Length 関数と sizeof 関数
*実習:文字のバイト数を調べる
例:
julia> A= "sky"
"sky"
julia> B = "青い空"
"青い空"
julia> length(A)
3
julia> length(B)
3
julia> sizeof(A)
3
julia> sizeof(B)
9
質問:平仮名または漢字場合、一文字を表すために何バイトが必要ですか?
10. 文字列の出力
練習 print 関数
print 関数は複数の入力を引き受ける。
julia> print("Hello" )
Hello
julia> print("Hello world" , "こんにちはこの世界" )
Hello worldこんにちはこの世界
入力が文字列ではない場合、その内容が評価され、文字列に変換して表示する。
julia> print(" 16 + 61 = " , 16 + 61 , " です。" )
16 + 61 = 77 です。
練習 println
print では、文字列の出力の末尾に改行は付きません。
println を使えば、自動的に末尾に改行を挿入します
julia> print("これは" ); print("なんに" ); print("?" )
これはなんに?
julia> println("これは" ); println("なんに" ); println("?" )
これは
なんに
?
11. 文字列の制御
文字列の内容は
julia> A = "abc" #Aは文字列。内容は abc
"abc"
julia> B = abc #abc は変数。事前定義がなかったら Error が出る
ERROR: UndefVarError: abc not defined
*実習:Escape character エスケープ文字
• 文字列の表示を制御する、またはダブルクォートなどを表す エスケープ文字という \で始まる文字がある。
エスケープ文字の例:
エスケープ文字 | 意味 |
---|---|
改行 newline | |
タブ tab | |
シングルクォート | |
ダブルクォート | |
\ 文字 |
例
julia> print("abcabcabc" )
abcabcabc
julia> print("abc\nabc\nabc" )
abc
abc
abc
julia> print("abc\tabc\tabc\n123\t456\t789" )
abc abc abc
123 456 789
*実習:String concatenation 文字列の結合
数学:
\[ x \times y \times z = xyz\]
\[ x^3 = x x x\]
Julia も 演算子
julia> "x" * "y" * "z"
"xyz"
julia> "x" ^3
"xxx"
julia> A = "Hello World !" ;
julia> B = "=" ^( length(A) );
julia> print(B * "\n" * A * "\n" * B)
=============
Hello World !
=============
*実習:数値などを文字列に変換する
•
• 変換した文字列が他の文字列との結合もできる。
julia> x = 2^10 ;
julia> A = "1 kB = " * string(x);
julia> print(A)
1 kB = 1024
•
julia> A = "3 + 3 = " * string(3 + 3 )
"3 + 3 = 6"
*実習:文字列の中で計算などを行う
•
• 用途は
julia> x = 10 ;
julia> A = "3 + 3 = $(3+3) です。\nちなみに x is $(x)"
"3 + 3 = 6 です。\nちなみに x is 10"
julia> print(A)
3 + 3 = 6 です。
ちなみに x is 10