Document

練習問題の答え
変数の型と初期値
unsigned char A
unsigned char B
char
C
char
D
=
=
=
=
式
結果
D = A & B A:
B:
D:
D = A | B A:
B:
D:
3; (16進 0x03, 2進 0000 0011)
65; (16進 0x41, 2進 0100 0001)
-4; (16進 0xFC, 2進 1111 1100)
0;
1
練習問題の答え
変数の型と初期値
unsigned char A
unsigned char B
char
C
char
D
=
=
=
=
3; (16進 0x03, 2進 0000 0011)
65; (16進 0x41, 2進 0100 0001)
-4; (16進 0xFC, 2進 1111 1100)
0;
式
結果
D = A & B A: 0000
B: 0100
D: 0000
D = A | B A: 0000
B: 0100
D: 0100
0011
0001
0001
0011
0001
0011
(0x03,
3)
(0x41, 65)
(0x01,
1)
(0x03, 3)
(0x41, 65)
(0x43, 67)
2
練習問題の答え
式
結果
D=A^B
A:
B:
D:
D = B << 2
B:
D:
D = A >> 3
A:
D:
3
練習問題の答え
式
結果
D=A^B
A: 0000 0011 (0x03,
B: 0100 0001 (0x41,
D: 0100 0010 (0x42,
3)
65)
66)
D = B << 2
B: 0100 0001 (0x41,
D: 0000 0100 (0x04,
65)
4)
D = A >> 3
A: 0000 0011 (0x03,
D: 0000 0000 (0x00,
3)
0)
4
練習問題の答え
式
結果
D = C >> 3
C:
D:
D = ~A
A:
D:
A >>= 2
A:
A:
←実行前
←実行後
5
練習問題の答え
式
結果
D = C >> 3
C: 1111 1100 (0xFC,
D: 1111 1111 (0xFF,
-4)
-1)
D = ~A
A: 0000 0011 (0x03,
D: 1111 1100 (0xFC,
3)
-4)
A >>= 2
A: 0000 0011 (0x03,
A: 0000 0000 (0x00,
3)←実行前
0)←実行後
6
画像バッファの様子
→ i
pImage
xsize
ysize
level
pBuffer
256
192
255
↓
j
pImage->pBuffer[0][0]
→ i
↓
j
ysize個
pImage->pBuffer[j][i]
pImage->pBuffer[j]
xsize個
7
画像の90度回転 ipRotateImage
[0][0]
[0][ysize – 1]
→ i
↓
j
xsize個
ysize個
xsize個
ysize個
関数内で作業用の画像バッファメモリを確保し,
順に画素を埋めていけばよい.
iioMallocImageBuffer
iioFreeImageBuffer
8
画素のビットマスク ipBitMask
pImage->pBuffer[0][0]
→ i
↓
j
1画素ずつ処理していく
1画素はR,G,Bから成る構造体で表現している
→ R,G,Bのそれぞれに対して処理を行う
9
画素のビットマスク ipBitMask
pImage->pBuffer[j][i].r &= 0xC0;
pImage->pBuffer[j][i].g &= 0xC0;
pImage->pBuffer[j][i].b &= 0xC0;
R 64
R 100
01100100
G 150
10010110
B 125
0xC0との
&演算
01000000
2進表現で
1100 0000
下位6ビットが0なので
ビットごとのAND演算
をすると,下位6ビット
が0にマスクされる.
G 128
10000000
B 64
10
画素のビットマスク ipBitMask
pImage->pBuffer[j][i].r &= 0xC0;
pImage->pBuffer[j][i].g &= 0xC0;
pImage->pBuffer[j][i].b &= 0xC0;
サンプルプログラム3:
各画素の下位”6”ビットを0でマスク→0xC0との&演算
演習課題:
各画素の下位”4”ビットを0でマスク →何を使えばよい
か?
11