Topic 5

目次

1) 「*問」の提出について 2) Decimal 10進法 3) Binary number 2進法 4) Hexadecimal number 16進法 5) Byte バイト 6) Integer & Unsigned Integer 整数と符号なり整数 7) Big number 桁の大きい数値 8) ASCII アスキー 9) Unicode ユニコード 10) Length 関数と sizeof 関数 11) 文字列の出力 12) 文字列の制御

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


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

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:

source

演習:Binary to decimal

Int() 関数を使って2進数を十進数に変換する。

        ► 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

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

julia> 2.0 ^100
1.2676506002282294e30

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

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

julia> big(2)^64
18446744073709551616

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

*問 3

Julia を用いて、次の値(整数)を答えよ。

\[ 2^{1000} \]


8. 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


9. 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によって、実際の表示が異なる、または表示できない場合があります。

演習: WORD に Unicode を16進数で入力してみる

 • Word を開く。

 • Unicodeを16進数で入力して、Alt+Xを押す(Altキーを押しながらXキーを押す)と、そのカーソルの直前の文字コードが、その文字に変換される。

 • 例えば、「1f600」を入力して、Alt+Xを押すと、文字コードの箇所が '😀'(Unicode U+1F600)に変わる。

 • そのままもう一度Alt+Xを押すと、以前の文字コードに戻る。


10. 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

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

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

エスケープ文字の例:

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

*問 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