---
title: 小さく始める2進数
tags:  #[第10回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://convert.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJNGRK4378.jpg?width=480
description: [第10回大阪sas勉強会]
published: October 21, 24
canonical: https://convert.docswell.com/s/6484025/ZXEWEG-2024-10-21-162009
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJNGRK4378.jpg)

第10回大阪SAS勉強会
2024.10.18（金）
小さく始める２進数
～今どき聞かない２進数をあえて学ぶ～
ノーベルファーマ株式会社
研究開発本部 データサイエンス部
森田 祐介
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YE9WMVQPE3.jpg)

要旨
• コンピュータは0と1で情報処理するため、2進数との親和性が高い
• 2進数を知ることで、SASのことを、より理解できるかもしれない
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GE8NLPGX7D.jpg)

発表内容
1. 導入
2. 2進数とは
3. SASと2進数
4. まとめ
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LELPL1GN7R.jpg)

導入：いまさら2進数？
• 2進数とは、0と1を使って数を表す方法
• コンピュータは内部で0と1で情報を扱っているため、2進数との親和性が高い
• OSや開発環境によって、ハードウエアが高度に抽象化され、
また、メモリも潤沢になった現在では、
2進数をプログラミングで意識する機会は少なくなっている
• しかし、SASプログラミングでも2進数が顔をのぞかせる場面があり、
この機会に2進数とその登場シーンを紹介したい
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JM4MWQQ7W.jpg)

2進数とは：0と1だけで情報を表現
• 数を数えてみる
10進数
2進数
１
１
２
10
３
11
４
100
0と1しか使えないので
桁数を増やすしかない
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/PJRWVY8K79.jpg)

2進数とは：0と1だけで情報を表現
10進数：0～9が使える
2進数：0と1が使える
16進数：0～Fが使える
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F
しれっと導入
4桁の2進数を
1文字で表すのに便利
A～Fも使えるので
桁が繰り上がらない
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PEXPZG857X.jpg)

2進数とは：情報（0と1）の量
• 2進数で表現したデータの単位
0 0 0 0 1 0 0 0
1バイト＝8ビット
1Kバイト＝1024バイト
1Mバイト＝1024×1024バイト＝1024Kバイト
1Gバイト＝1024×1024×1024バイト＝1024Mバイト
1ビット：
2進数の一桁
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3EKD84KRJD.jpg)

SASと2進数：数値データの取扱い
• 倍精度浮動小数点（8バイト＝64ビット）で1つの数値を格納
指数部(11bit)
仮数部(52bit)
符号部(1bit)
0：正、1：負
-1023
(2進数)
1.625＝(－1)0×1.101(2進数)×201111111111
(=1023)
data double_byte;
num = 1.625;
length binary sign exponent fraction $64;
binary = put(num, binary64.);*64bitの2進数に変換;
sign = substr(binary,1,1);
*符号部の切出し;
exponent = substr(binary,2, 11);*指数部の切出し;
fraction = substr(binary,13, 52);*仮数部の切出し;
run;
SAS Help Center: Numerical Accuracy in SAS Software
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L73R2LZGJ5.jpg)

SASと2進数：2進数⇔10進数⇔16進数
• フォーマットを用いて簡単に変換できる
※1つ前のスライドは
SASが内部で数値をどう格納するかの話
このスライドは数値をどう見せるかの話
*****************************************;
*2進数⇔10進数⇔16進数への変換;
*****************************************;
data bin2dec2hex;
do i = 1 to 15;
*10進数(数値)から2進数(文字)へ;
binary = put(i, binary4.);
*2進数(文字)から10進数(数値)へ;
decimal = input(binary, binary4.);
*10進数(数値)から16進数(文字)へ;
hex = put(decimal, hex1.);
*16進数(文字)から10進数(数値)へ;
decimal2 = input(hex, hex1.);
output;
end;
run;
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/87DYZNRN7G.jpg)

SASと2進数：色の指定
※赤、緑、青の各成分を
2桁の16進数(＝8bitの2進数＝0～255)で指定
proc sgplot data=sashelp.class;
styleattrs
datasymbols = (circlefilled trianglefilled)
datacontrastcolors = (cx0000FF cxFF0000);
scatter x=height y=weight / group=sex;
run;
色を自在に操る（HSVカラーコードのすすめ）
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJP6D5WNE8.jpg)

SASと2進数：COMPAREプロシジャ
• COMPAREの結果がマクロ変数SYSINFOに自動的に格納
SYSINFOのbit構成
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
1 ０
０
０
0
0
①変数ラベルだけに不一致があるとき
０
０
０
０
０
０
0
０
０
０
②変数ラベル・FORMAT・Lengthに不一致があるとき
０
０
０
０
０
０
0
０
０
０
1 1 1 ０
0
0
つまり、SYSINFOの値を調べれば
どのような不一致があったのかを知ることができる！
データステップ100万回 SAS新手一生: Compareプロシジャの結果が一致か不一致
か、何が不一致かをマクロ変数で取得する話 (sas-tumesas.blogspot.com)
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2EV31P8Y7Q.jpg)

まとめ
• 今どき聞かない2進数（と16進数）をおさらいした
• 本発表の内容を知らなくても、おそらく不利益はありません
• しかし、2進数の知識をもつことで
SASの気持ちになって考えることができたり
SASプログラミングでのAHA体験が増えるかもしれない
12


