Topic 5

目次

1) *実習課題の提出について 2) Decimal 10進法 3) Binary number 2進法 4) Hexadecimal number 16進法 5) Byte バイト 6) Integer & Unsigned Integer 整数と符号なり整数 7) ASCII アスキー 8) Unicode ユニコード 9) Length 関数と sizeof 関数 10) 文字列の出力 11) 文字列の制御 Topic 4 へ移動Topic 6 へ移動

データサイエンス CDS009    (チェン leechuin@yamanashi.ac.jp) 更新日: 2022-10-01


コンピュータの数値表現と文字コード

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:

source

*実習:Binary to decimal

Int() 関数を使う。

        ► Int は Integer 整数の省略です。

        ► 括弧に任意の2進数をいれる。

        ► 2進数は 0b で始まる。

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進数は 0x で始まる。

        ► 2進数は 0b で始まる。

julia> 0b101011
0x2b

Hex to decimal 16進数から10進数へ

        ► Int() 関数を使う。

        ► Int は Integer 整数の省略です。

        ► 括弧に任意の16進数をいれる。

julia> Int(0x9)
9

julia> Int(0x10)
16

julia> Int(0xa)
10

julia> Int(0xff)
255

Dec to hex 10進数から16進数へ

        ► UInt() 関数を使う。

        ► UInt は Unsigned Integer 符号なし整数 の省略です。

        ► 括弧に任意の16進数をいれる。

julia> UInt(10)
0x000000000000000a

julia> UInt(17)
0x0000000000000011


5. Byte バイト

データ量の単位です。

1 byte, もしくは 1 B は 8 bits のこと。

例:

Unit 単位:


単位の prefix 接頭辞:

p, n, μ, m, k, M, G, T, P

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.8446744073709552e19

julia> 2.0 ^1000
1.0715086071862673e301

*実習:どうしても整数を使いたい場合

数値をBigInt()またはbig()関数で指定したら巨大桁整数の演算もできる。

julia> big(2)^64
18446744073709551616

julia> big(2)^1000  #自分でやってください


7. ASCII アスキー

American Standard Code for Information Interchange

 • コンピュータなどの機器の通信、情報交換に使われいるラテン文字コード。

 • 1文字のメモリサイズは1 byte です。

 • 1文字を 1 byte の中の 7 bitsで表す

 • 数: 2^7 = 128

 • 最初の32個と最後の 7F はモニターの制御 (New line, Del, etc.)に使われる。表示はしない。

ASCII 表:

*実習

Char() 関数を使って10進数から 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年規格:収録できるの符号空間:0x000000 〜 0x10FFFF

収録できるの符号の数を計算してみましょう:

julia> Int(0x10FFFF)
1114111

 • 現在(2020年3月)収録したは 143,859 個です

ある小学生漢字辞書(三省堂)

収録した文字の例:

他の block の例

一覧表

練習:Unicodeで世界の文字を出力してみる

julia> Char(0x5e1d)
'帝': Unicode U+5E1D (category Lo: Letter, other)

julia> Char(0x1f600)
'😀': Unicode U+1F600 (category So: Symbol, other)

julia> Char(0x2192)
'→': Unicode U+2192 (category Sm: Symbol, math)

julia> Char(0x03a9)
'Ω': Unicode U+03A9 (category Lu: Letter, uppercase)

julia> Char(0x0636) #アラビア語
'ض': Unicode U+0636 (category Lo: Letter, other)

パソコンとOSによって、実際の表示が異なる、または表示できない場合があります。

*実習:Unicodeで世界の文字を出力してみる

一行のコマンドで Unicode を連続的に出力する。

julia> [Char(0x5e1d + n) for n=0:9] #原点と n を変えてみる
10-element Array{Char,1}:
 '帝': Unicode U+5E1D (category Lo: Letter, other)
 '帞': Unicode U+5E1E (category Lo: Letter, other)
 '帟': Unicode U+5E1F (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 関数

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 エスケープ文字

 • 文字列の表示を制御する、またはダブルクォートなどを表す エスケープ文字という \で始まる文字がある。

エスケープ文字の例:

エスケープ文字 意味
\n 改行 newline
\t タブ 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 !
=============

*実習:数値などを文字列に変換する

 • string 関数を使って、数値やデータを文字列に変換することができる。

 • 変換した文字列が他の文字列との結合もできる。

julia> x = 2^10;

julia> A = "1 kB = " * string(x);

julia> print(A)
1 kB = 1024

 • string(...) 括弧の中で計算もできる。

julia> A = "3 + 3 = " * string(3 + 3)
"3 + 3 = 6"

*実習:文字列の中で計算などを行う

 • $(...)を使えば、"..." の中でも、変数の評価、計算などができる。

 • 用途は string 関数と同じですが、置き場所がダブルクォートの中です。

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