開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C (プログラミング言語)
- Clang (コンパイラ)
C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の11章(ビット演算)、11.1(ビット演算子)、11.3(ビット単位 OR (|))、11.4(ビット単に排他的 OR (^))、11.5(補数演算子 NOT (~))、11.6(左シフト演算子と右シフト演算子(<<, >>))、11.7(ビットのセットとクリアおよびテスト)、設問11-1を解いてみる。
その他参考書籍
- プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
設問11-1.
DIRECT_CONNECTはビット番号8を使用してけど、char型は8ビット(76543210)でビット番号は7までだから、フラグは正しく動作しない。
フラグに1バイト(8ビット)のchar型ではなく、2バイト(16ビット)のshort int型を使えばいい。
修正。
コード
sample.c
#include <stdio.h> const int HIGH_SPEED = (1<<7); const int DIRECT_CONNECT = (1<<8); short int flags = 0; int main() { flags |= HIGH_SPEED; flags |= DIRECT_CONNECT; if ((flags & HIGH_SPEED) != 0){ printf("High speed set\n"); } if ((flags & DIRECT_CONNECT) != 0){ printf("Direct connect set\n"); } 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 High speed set Direct connect set $
0 コメント:
コメントを投稿