2013年11月13日水曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の11章(ビット演算)、11.8(ビットマップグラフィックス)、設問11-2を解いてみる。

その他参考書籍

設問11-2.

2番目について、signed char型は1バイト(8ビット)なので、0x80はbinary 1000 0000。これを1だけ右シフトすると、符号ビットがセットされている(signed)のでbinary 1100 0000となる。よって動作しない。1番目は、short int型で、符号付きであることは2番目と変わらないけど、2バイト(16ビット)なので、0x80はbinary 0000 0000 1000 0000となり、符号ビットはセットされていないので、1だけ右シフトしても、0が詰められてbinary 0000 0000 0100となり、動作する。

2番目も動作するようにするには、符号ビットをセットしないように、singedではなくunsignedにすればいい。

修正。

コード

sample.c

#include <stdio.h>
int main()
{
    short int i;
    unsigned char ch;
    
    for (i = 0x80; i != 0; i = (i >> 1)){
        printf("i is %x (%d)\n", i, i);
    }
    
    for (ch = 0x80; ch != 0; ch = (ch >> 1)){
        printf("ch is %x (%d)\n", ch, ch);
    }
    return (0);
}

makefile

CC=cc
CFLAGS=-g

sample: sample.c
 $(CC) $(CFLAGS) -o sample sample.c

clean:
 rm -f sample

入出力結果(Terminal)

$ make
cc -g -o sample sample.c
$ ./sample
i is 80 (128)
i is 40 (64)
i is 20 (32)
i is 10 (16)
i is 8 (8)
i is 4 (4)
i is 2 (2)
i is 1 (1)
ch is 80 (128)
ch is 40 (64)
ch is 20 (32)
ch is 10 (16)
ch is 8 (8)
ch is 4 (4)
ch is 2 (2)
ch is 1 (1)
$

0 コメント:

コメントを投稿