コンピュータの数値表現と文字コード
1. 「*問」の提出について
•
指示:
• 答えと「成功した出力」をコピペしで Word に貼り付ける。
• 答えを1つの Word ファイル (.docx) にまとめて提出してください。
• 形式は自由。
Julia ターミナル(REPL)の操作 Tips
• 矢印 キー
• 矢印 キー
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
• 1 TB は何 byte ですか?
Julia を使って計算しましょう。
julia> #自分でやってください。
6. Integer & Unsigned Integer 整数と符号なり整数
• 整数: ... -2, -1, 0 , 1, 2, ...
• 符号なし整数: 0 , 1, 2, ...
8 bit (1 Byte)で 符号なし整数を表せる

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

• 現代のパソコンは Two's complement(2の補数) を使っている。

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 #最大値を超えるとあり得ない結果が出る
-9223372036854775807
*問 2
Juliaを使っての計算を実行せよ。結果を説明してください。
julia> 2^64
7. Big number 桁の大きい数値
演習:桁の大きい数値の演算には浮動小数点数を使う
浮動小数点数 Floating point は: 1.0, 2.12, -4.89 など
julia> 2.0 ^64
1.8446744073709552 e19
julia> 2.0 ^100
1.2676506002282294 e30
演習:どうしても整数を使いたい場合
数値を
julia> big(2 )^64
18446744073709551616
julia> big(2 )^100 #自分でやってください
*問 3
Julia を用いて、次の値(整数)を答えよ。
\[ 2^{1000} \]
8. 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
9. Unicode ユニコード

• 各国、メーカーは独自の文字コードを使います。
► 例:日本:Shift-JIS, EUC-JP
► 他の国、メーカとの互換性がなかった。
• Unicode ユニコード(統一された文字コード)
► 全世界の文字を 最大
► 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によって、実際の表示が異なる、または表示できない場合があります。
演習: WORD に Unicode を16進数で入力してみる
• Word を開く。
• Unicodeを16進数で入力して、Alt+Xを押す(Altキーを押しながらXキーを押す)と、そのカーソルの直前の文字コードが、その文字に変換される。
• 例えば、「1f600」を入力して、Alt+Xを押すと、文字コードの箇所が '😀'(Unicode U+1F600)に変わる。
• そのままもう一度Alt+Xを押すと、以前の文字コードに戻る。
10. Length 関数と sizeof 関数
演習:文字のバイト数を調べる
julia> A= "sky"
"sky"
julia> B = "青い空"
"青い空"
julia> length(A)
3
julia> length(B)
3
julia> sizeof(A)
3
julia> sizeof(B)
9
*問 4
sizeof を使って、下記の質問を答えよ。
「ア」を表すには、何バイトが必要ですか?)
11. 文字列の出力
練習 print 関数
print 関数は複数の入力を引き受ける。
julia> print("Hello" )
Hello
julia> print("Hello world" , "こんにちはこの世界" )
Hello worldこんにちはこの世界
入力が文字列ではない場合、その内容が評価され、文字列に変換して表示する。
julia> print(" 16 + 61 = " , 16 + 61 , " です。" )
16 + 61 = 77 です。
12. 文字列の制御
文字列の内容は
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
*問 5
julia> print("???" )#下記の出力を実現せよ
abc
abc
abc
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 !
=============
*問 6
julia> A = "55555"
"55555"
julia> print("???" )# 上記のA を使って、下記の出力を実現せよ
55555
5555555555
555555555555555