RISTイブニングスクール (応用編:第3日A)

変数の型と宣言
数理情報システム工学科
担当: 汐月哲夫
2015/10/1
プログラミング方法論
[email protected]
1
変数宣言
1:メモリ上に領域(サイズ)を確保する
2:データの意味付(型)を決める
3:メモリの位置(番地)と名前(変数名)を対応させる
4:領域を初期化する(省略されることもある)
2015/10/1
プログラミング方法論
[email protected]
2
ソースリスト
0x0000
メモリ
int hensu1;
変数対応表(symbol table)
サイズ
4
変数名
hensu1
型
int
4
byte
アドレス
0x0100
0x0100
0x0103
0xffff
2015/10/1
プログラミング方法論
[email protected]
3
変数の型
指定子
型の名称
サ イ ズ
値
(バイト)
char
unsigned char
short
int
long
long long
unsigned short
unsigned int
unsigned long
unsigned long long
float
double
void
(型指定子) *
文字型
整数型
浮動小数点型
型無し
ポインタ型
1
1
2
4*
4
8
2
4*
4
8
4
8
-128~127
0~255
-32768~32767
-2147483648~2147483647
-2147483648~2147483647
0~65535
0~4294967295
0~4294967295
0~+-3.40e38
0~+-2.23e308
4*
* は環境によって異なる
2015/10/1
プログラミング方法論
[email protected]
4
変数のサイズを調べる
/* filename: size.c */
/* coded by T.Shiotsuki, Sep.3,1999 */
File name=
size01.c
#include <stdio.h>
char mes[]=“RIST\n”;
int main(void)
{
int i;
printf(“%d \n”, sizeof(i));
printf(“%d \n”, sizeof(mes));
return 0;
}
2015/10/1
プログラミング方法論
[email protected]
5
変数のサイズを調べる
/* filename: size02.c */
/* coded by T.Shiotsuki, Sep.3,1999 */
ここにさまざまな型指定
#include <stdio.h>
子を入れてみる
File name=
size02.c
int main( void )
{
printf(“sizeof(char) = %d\n”, sizeof(char));
printf(“sizeof(int) = %d\n”, sizeof(int));
printf(“sizeof(long) = %d\n”, sizeof(long));
printf(“sizeof(long long) = %d\n”, sizeof(long long));
return 0;
}
2015/10/1
プログラミング方法論
[email protected]
6
文字型(char)
• 1バイト
• 対応づけ
– アスキーコードの文字(漢字コードは不可)
– 1バイト長の固定小数点
– 8ビットのフラグ
• 演算操作
– 整数型と同じ(算術、論理、ビット)
• printf の書式指定
– 1文字出力
2015/10/1
%c
プログラミング方法論
[email protected]
7
アスキーコード(ASCII)
下位4ビット
0 1 2 3 4 5 6 7 8 9 a b c d e f
上
位
3
ビ
ッ
ト
0
1
2
3
4
5
6
7
NUL
SOH
EXT
EOT
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
!
1
A
Q
a
q
“
2
B
R
b
r
#
3
C
S
c
s
$
4
D
T
d
t
%
5
E
U
e
u
&
6
F
V
f
v
‘
7
G
W
g
w
(
8
H
X
h
x
)
9
I
Y
i
y
*
:
J
Z
j
z
+
;
K
[
k
{
,
<
L
¥
l
|
=
M
]
m
}
.
>
N
^
n
~
/
?
O
_
o
SP
0
@
P
`
p
DEL
7 6 5 4 3 2 1 0
パリティビット
2015/10/1
上位
下位
プログラミング方法論
[email protected]
8
制御文字
制御文字
NUL
BEL
BS
HT
LF
VT
FF
CR
¥
?
‘
“
8 進数
16進数
2015/10/1
値
0x00
0x07
0x08
0x09
0x0a
0x0b
0x0c
0x0d
0x5c
0x3f
0x27
0x22
C言語
¥0
¥a
¥b
¥t
¥n
¥v
¥f
¥r
¥¥
¥?
¥’
¥”
¥ooo
¥xhh
意味
文字列の終端
ベル
バックスペース
水平タブ
改行
垂直タブ
改ページ
復帰
バックスラッシュ(円記号)
疑問符
単引用符
引用符
プログラミング方法論
[email protected]
9
整数型(int, long,...)
• 2、4、8バイト
– (char を1バイト長の整数型とみなせば 1,2,4,8)
• 演算:
– 固定小数点2進数としての算術計算(arithmetic
operation)
– 論理値としての論理演算(logical operation)
– フラグの集合としてのビット演算(bit operation)
• 表現できる範囲と負数の取り扱い
– 符号つき整数(signed)と符号無し整数(unsigned)
2015/10/1
プログラミング方法論
[email protected]
10
整数型変数の入出力
• printf() ,scanf()の書式指定
2015/10/1
表示形式
対象データの型
printf の書式指定
文字
文字型
%c
符号つき10進数
文字型、整数型
%d, %i
符号無し10進数
文字型、整数型
%u
16 進数
文字型、整数型
%x
8 進数
文字型、整数型
%o
注意: ANSI 規格では %l 修飾が規定されていますが、
gcc では採用していません
。
プログラミング方法論
[email protected]
11
2進数の算術演算
一桁の加算
繰上がりのある計算
1111
0+0=0
0+1=1
1+0=1
1+1=10
2015/10/1
101101
+)
1011
--------------111000
プログラミング方法論
[email protected]
12
2進数
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10001
2015/10/1
10進数
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
16進数
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
2進数
1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
10000000000
100000000000
1000000000000
プログラミング方法論
[email protected]
10進数
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
16進数
1
2
4
8
10
20
40
80
100
200
400
800
1000
13
固定小数点表現
• unsigned char の例
7 6 5 4 3 2 1 0
1 0 1 1 0 1 0 1
1x27+0x26+1x25+1x24+0x23+1x22+0x21+1x20
=128+32+16+4+1 = 181
• (signed) char の例
10110101
+) 0 1 0 0 1 0 1 1
100000000
2015/10/1
=181
= 75
=256(mod 256)=0
プログラミング方法論
[email protected]
-75
14
signed と unsigned
000
000
111
001
7
0
1
6
110
0
1
010
010 110 -2
4 3
2
-3
011
101
ー4
3
101
100
011
100
符号つき整数
signed
符号なし整数
unsigned
2015/10/1
001
-1
2
5
111
最上位ビット=符号ビット
プログラミング方法論
[email protected]
15
ディジタルの計算
(論理計算)
TRUE=T (真) FALSE=F(偽) とすると
論理積
T && T=T
T && F=F
F && T=F
F && F=F
2015/10/1
論理和
論理差
T || T=T
T || F=T
F || T=T
F || F=F
T ^ T=F
T ^ F=T
F ^ T=T
F ^ F=F
プログラミング方法論
[email protected]
否定
!T=F
!F=T
16
ディジタルの計算
(ビットごとの論理計算)
論理積
論理和
論理差
否定
0 & 0=0
0 & 1=0
1 & 0=0
1 & 1=1
0 | 0=0
0 | 1=1
1 | 0=1
1 | 1=1
0 ^ 0=0
0 ^ 1=1
1 ^ 0=1
1 ^ 1=0
~0=1
~1=0
2015/10/1
プログラミング方法論
[email protected]
17
論理演算
論理積
論理和
0
1
0
0
0
1
0
1
論理差
2015/10/1
0
1
0
0
1
1
1
1
否定
0
1
0
1
0
0
1
1
0
1
1
0
プログラミング方法論
[email protected]
18
浮動小数点型
C言語の表記
-123.45e3
-123.45×103
-
3
数学的表記
123.45
正規化
-
6
符号 指数部
2015/10/1
0.12345
内部表現
仮数部(小数部)
プログラミング方法論
[email protected]
19
IEEE の浮動小数点型
-
6
符号 指数部
0.12345
内部表現
仮数部(小数部)
1
8
23
=32 bit = float
1
11
52
=64 bit = double
NaN(Not a Number),±∞をあらわす工夫がなされている
指数部のビット長を動的に変更できる型も提案されていてる
(URR: Universal representation of real number)
2015/10/1
プログラミング方法論
[email protected]
20