2.7 型変換, 演習2-3 K&R プログラミング言語C
2009年12月18日
2.7 型変換
math.h をインクルードしているにもかかわらず、以下のようなエラーメッセージが表示されてコンパイルできない場合は、gcc
に -lm
オプションを付けて手動リンクさせる必要がある。
$ gcc -Wall -o cast cast.c /tmp/cceQkYQw.o: In function `main': cast.c:(.text+0x41): undefined reference to `sqrt' collect2: ld returned 1 exit status
整数と倍精度浮動小数点数の型変換
#include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { int n = 2; double d = 5.432; printf("%f\n", (double) n); printf("%f\n", sqrt((double) n)); printf("%d\n", (int) d); return 0; }
実行結果
$ ./cast 2.000000 1.414214 5
演習2-3
#include <stdio.h> #include <string.h> #include <ctype.h> int htoi(char *s); int to_int(char c); int main(int argc, char *argv[]) { printf("0xff => %d\n", htoi("0xff")); printf("0X7B => %d\n", htoi("0X7B")); printf("1f => %d\n", htoi("1f")); printf("2A => %d\n", htoi("2A")); return 0; } int htoi(char *s) { int i, j, c, val, len; len = strlen(s); if (len == 2 || len == 4) { if (s[0] == '0' && toupper(s[1]) == 'X') { i = 2; } else { i = 0; } for (j=0; i < len; i++, j++) { c = toupper(s[i]); if (j == 0) { val = 16 * to_int(c); } else if (j == 1) { val = val + to_int(c); } } return val; } else { return -1; } return 0; } int to_int(char c) { if (c >= 'A' && c <= 'F') { return c - 55; } else if (c >= '0' && c <= '9') { return c - 48; } else { return -1; } }
実行結果
$ ./ex2-3 0xff => 255 0X7B => 123 1f => 31 2A => 42
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726