2.9 ビットごとの論理演算子 K&R プログラミング言語C
& (AND) 共に 1 の場合 1 どちらか一方、または両方が 0 の場合 0 | (OR) 共に 0 の場合 0 どちらか一方、または両方が 1 の場合 1 ^ (XOR) 共に同じ値の場合 0 異なる値の場合 1 << (Left Shift) 各ビットを左に指定したビット数だけ移動 右のはみ出したビットは 0 になる >> (Right Shift) 各ビットを右に…続きを読む
& (AND) 共に 1 の場合 1 どちらか一方、または両方が 0 の場合 0 | (OR) 共に 0 の場合 0 どちらか一方、または両方が 1 の場合 1 ^ (XOR) 共に同じ値の場合 0 異なる値の場合 1 << (Left Shift) 各ビットを左に指定したビット数だけ移動 右のはみ出したビットは 0 になる >> (Right Shift) 各ビットを右に…続きを読む
インクリメント(及びデクリメント)演算子の前置と後置の違い。 #include <stdio.h> int main(int argc, char *argv[]) { int i, j; i = j = 10; printf("i++ => %d\n", i++); /* 印字してからインクリメント */ printf("++j => %d\…続きを読む
2.7 型変換 math.h をインクルードしているにもかかわらず、以下のようなエラーメッセージが表示されてコンパイルできない場合は、gcc に -lm オプションを付けて手動リンクさせる必要がある。 $ gcc -Wall -o cast cast.c /tmp/cceQkYQw.o: In function `main’: cast.c:(.text+0x41): undefined refe…続きを読む
演習2-2 for (i=0; i<lim-1 && (c=getchar()) != ‘\n’ && c != eof; ++i) s[i] = c; 上記の for ループと等価なループを && と || を使わずに書く。 ループに while を使った方がよかったかな。 for (i=0; i<lim-1; ++i) { if ((c = getc…続きを読む
2.3 定数 #include <stdio.h> int main(int argc, char *argv[]) { printf("%d\n", 1234); /* 整数定数 */ printf("%ld\n", 1234L); /* long 定数 */ printf("%d\n", 12345678901234567…続きを読む
2.2 データ型とサイズ C言語の基本的なデータ型 型名 型の内容 char 1byteの文字1つを保持できる。 int 整数、計算機が最も自然に扱える整数のサイズ float 単精度浮動小数点数 double 倍精度浮動小数点数 int には short と long の修飾子を適用できる。 short int si; long int li; /* int は省略可能 */ short sj;…続きを読む
演習1-24 開始 [ が見つかればカウンタを増加させ、閉じ ] が見つかればカウンタを減少させている。 最終的にカウンタが 0 であればエラーではないという、手抜き版。 #include <stdio.h> #define TRUE 1 #define FALSE 0 int main(int argc, char *argv[]) { int c, d, cb_count, is_…続きを読む
演習1-23 文字を先読みしてコメントのチェックを行っている。 コメントと二重引用符の範囲判定部分が汚い・・・ #include <stdio.h> #define TRUE 1 #define FALSE 0 int main(int argc, char *argv[]) { int c, d, is_comment, is_dquote; is_comment = is_dquo…続きを読む
演習1-22 スペースか改行文字が現われる毎に word バッファに保存している文字列を出力する。 出力の際に最大桁数を超えるかどうかのチェックを行う。 1単語の長さが最大桁数を超える場合は別に処理を行なっている。 長さが見やすいように最初に20個の数字を出力している。 #include <stdio.h> #define MAXLENGTH 20 #define WORD_SIZE …続きを読む
演習1-21 n 回連続するスペースを単純にタブに変換するだけのものを作った。 #include <stdio.h> #define DEFAULT_TABSTOP 4 #define IS_BLANK 1 #define NOT_BLANK 0 void put_space(int len, char c); int main(int argc, char *argv[]) { in…続きを読む