開発環境
- 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 コメント:
コメントを投稿