- 締切済み
16進数のままで加減乗除
jactaの回答
- jacta
- ベストアンサー率26% (845/3158)
こんな感じでしょうか? #include <stdio.h> #include <limits.h> int table[][SCHAR_MAX+1] = { ['0'] = { ['0'] = 0, ['1'] = 1, ['2'] = 2, ['3'] = 3, ['4'] = 4, ['5'] = 5, ['6'] = 6, ['7'] = 7, ['8'] = 8, ['9'] = 9, ['a'] = 10, ['b'] = 11, ['c'] = 12, ['d'] = 13, ['e'] = 14, ['f'] = 15, }, ['1'] = { ['0'] = 1, ['1'] = 2, ['2'] = 3, ['3'] = 4, ['4'] = 5, ['5'] = 6, ['6'] = 7, ['7'] = 8, ['8'] = 9, ['9'] = 10, ['a'] = 11, ['b'] = 12, ['c'] = 13, ['d'] = 14, ['e'] = 15, ['f'] = 16, }, ['2'] = { ['0'] = 2, ['1'] = 3, ['2'] = 4, ['3'] = 5, ['4'] = 6, ['5'] = 7, ['6'] = 8, ['7'] = 9, ['8'] = 10, ['9'] = 11, ['a'] = 12, ['b'] = 13, ['c'] = 14, ['d'] = 15, ['e'] = 16, ['f'] = 17, }, ['3'] = { ['0'] = 3, ['1'] = 4, ['2'] = 5, ['3'] = 6, ['4'] = 7, ['5'] = 8, ['6'] = 9, ['7'] = 10, ['8'] = 11, ['9'] = 12, ['a'] = 13, ['b'] = 14, ['c'] = 15, ['d'] = 16, ['e'] = 17, ['f'] = 18, }, ['4'] = { ['0'] = 4, ['1'] = 5, ['2'] = 6, ['3'] = 7, ['4'] = 8, ['5'] = 9, ['6'] = 10, ['7'] = 11, ['8'] = 12, ['9'] = 13, ['a'] = 14, ['b'] = 15, ['c'] = 16, ['d'] = 17, ['e'] = 18, ['f'] = 19, }, ['5'] = { ['0'] = 5, ['1'] = 6, ['2'] = 7, ['3'] = 8, ['4'] = 9, ['5'] = 10, ['6'] = 11, ['7'] = 12, ['8'] = 13, ['9'] = 14, ['a'] = 15, ['b'] = 16, ['c'] = 17, ['d'] = 18, ['e'] = 19, ['f'] = 20, }, ['6'] = { ['0'] = 6, ['1'] = 7, ['2'] = 8, ['3'] = 9, ['4'] = 10, ['5'] = 11, ['6'] = 12, ['7'] = 13, ['8'] = 14, ['9'] = 15, ['a'] = 16, ['b'] = 17, ['c'] = 18, ['d'] = 19, ['e'] = 20, ['f'] = 21, }, ['7'] = { ['0'] = 7, ['1'] = 8, ['2'] = 9, ['3'] = 10, ['4'] = 11, ['5'] = 12, ['6'] = 13, ['7'] = 14, ['8'] = 15, ['9'] = 16, ['a'] = 17, ['b'] = 18, ['c'] = 19, ['d'] = 20, ['e'] = 21, ['f'] = 22, }, ['8'] = { ['0'] = 8, ['1'] = 9, ['2'] = 10, ['3'] = 11, ['4'] = 12, ['5'] = 13, ['6'] = 14, ['7'] = 15, ['8'] = 16, ['9'] = 17, ['a'] = 18, ['b'] = 19, ['c'] = 20, ['d'] = 21, ['e'] = 22, ['f'] = 23, }, ['9'] = { ['0'] = 9, ['1'] = 10, ['2'] = 11, ['3'] = 12, ['4'] = 13, ['5'] = 14, ['6'] = 15, ['7'] = 16, ['8'] = 17, ['9'] = 18, ['a'] = 19, ['b'] = 20, ['c'] = 21, ['d'] = 22, ['e'] = 23, ['f'] = 24, }, ['a'] = { ['0'] = 10, ['1'] = 11, ['2'] = 12, ['3'] = 13, ['4'] = 14, ['5'] = 15, ['6'] = 16, ['7'] = 17, ['8'] = 18, ['9'] = 19, ['a'] = 20, ['b'] = 21, ['c'] = 22, ['d'] = 23, ['e'] = 24, ['f'] = 25, }, ['b'] = { ['0'] = 11, ['1'] = 12, ['2'] = 13, ['3'] = 14, ['4'] = 15, ['5'] = 16, ['6'] = 17, ['7'] = 18, ['8'] = 19, ['9'] = 20, ['a'] = 21, ['b'] = 22, ['c'] = 23, ['d'] = 24, ['e'] = 25, ['f'] = 26, }, ['c'] = { ['0'] = 12, ['1'] = 13, ['2'] = 14, ['3'] = 15, ['4'] = 16, ['5'] = 17, ['6'] = 18, ['7'] = 19, ['8'] = 20, ['9'] = 21, ['a'] = 22, ['b'] = 23, ['c'] = 24, ['d'] = 25, ['e'] = 26, ['f'] = 27, }, ['d'] = { ['0'] = 13, ['1'] = 14, ['2'] = 15, ['3'] = 16, ['4'] = 17, ['5'] = 18, ['6'] = 19, ['7'] = 20, ['8'] = 21, ['9'] = 22, ['a'] = 23, ['b'] = 24, ['c'] = 25, ['d'] = 26, ['e'] = 27, ['f'] = 28, }, ['e'] = { ['0'] = 14, ['1'] = 15, ['2'] = 16, ['3'] = 17, ['4'] = 18, ['5'] = 19, ['6'] = 20, ['7'] = 21, ['8'] = 22, ['9'] = 23, ['a'] = 24, ['b'] = 25, ['c'] = 26, ['d'] = 27, ['e'] = 28, ['f'] = 29, }, ['f'] = { ['0'] = 15, ['1'] = 16, ['2'] = 17, ['3'] = 18, ['4'] = 19, ['5'] = 20, ['6'] = 21, ['7'] = 22, ['8'] = 23, ['9'] = 24, ['a'] = 25, ['b'] = 26, ['c'] = 27, ['d'] = 28, ['e'] = 29, ['f'] = 30, }, }; int main() { unsigned int a, b; scanf("%d%d", &a, &b); int n = sizeof(unsigned int)*2; char lhs[n+1], rhs[n+1]; sprintf(lhs, "%.*x", n, a); sprintf(rhs, "%.*x", n, b); printf(" %s\n" "+) %s\n" "-----------\n", lhs, rhs); char result[1+n+1]; int carry = 0; for (int i = n-1; i >= 0; i--) { int t = table[lhs[i]][rhs[i]] + carry; // 16進数のまま計算 if (t < 16) { carry = 0; } else { t -= 16; carry = 1; } result[i] = "0123456789abcdef"[t]; } result[1+n] = '\0'; printf(" %s\n", result); } エラーチェックは手抜きです。
関連するQ&A
- 2進数の加減乗除の仕組み
もし似たような質問がありましたら申し訳ありません。 色々と調べたのですが、混乱してわからなくなってしまい困っています。 (1)コンピュータが2進数で加減乗除を計算できる仕組みとはなんでしょうか? (2)2進数の加減乗除の仕組みとは、具体的にはなんでしょうか? (3)AND、OR、NOTの回路が演算回路なんでしょうか? たくさん質問してしまいすみません。 皆様の回答お待ちしております。
- 締切済み
- その他(学問・教育)
- 加減乗除の混じった計算問題
ふと思ったのですが、加減乗除の混じった計算問題で掛け算と割り算を 優先させるのはどうしてなのでしょうか。 優先させなければ、異なった答えがでるのはわかるのですが、一体どうして優先させるのかということが分かりません。 よろしくお願いします。
- ベストアンサー
- 数学・算数
- scanf関数を用いての加減乗除%+-*/入力
忙しい中失礼します。 C言語超初心者のものです。加減乗除入力方法について質問があります。 現在、scanf関数を用いて直接の加減乗除%+-*/を入力することにより、9-2=7なり、9*2=18なり、9/2=4なりの回答を出してみたいと思っているのですが、例2の文に変更した後、コンパイルしようとするとエラー(parse error before '2' )が出ます。 どのようにすれば、このエラーはなくなりますか?また、エラーがなくなれば、直接の加減乗除は可能でしょうか? 現在習っているC言語レベル: int、 scanf、 if-else 位です。 プログラム 例1 int main() { int num1, num2; char chr; printf("Enter an operator (* / + - %%): "); scanf("%c",&chr); scanf("%c",&num2); num1 = 9 - 2; printf("%d - %d = %d\n", 9, 2, num1); system("pause"); return 0; } 9-2=7 例2: num1 = 9 'chr’ 2; printf("%d %c %d = %d\n", 9, 'chr', 2, num1); scanfを用いてのキーボードからの”数値”の入力についての回答は沢山見つかるのですが、加減乗除入力についての回答はありませんでした。http://oshiete1.goo.ne.jp/qa1917724.htmlから多分”直接”の加減乗除入力なんてないのだろうな・・・と思いつつもどのページも’ハッキリ’とは書いていないので、質問しました。 そもそもscanf関数では直接の加減乗除入力を受け付けていない?ものなのでしょうか?もしあるのでしたら、その方法も教えて下さい。 どなたか分かる方がいらっしゃいましたら、回答願います。自分の知識の中では曖昧なのでハッキリした回答が欲しいのです。
- ベストアンサー
- C・C++・C#
- 2進数を10進数にするプログラム作成について
10進数から2進数に変換するプログラムはできたのですが2進数から10進数に変換するプログラムが作れません。。 値を入力してください:1111←と入力(例) 10進数では15です。 もう一度実行しますか?(1…yes/2…no) というプログラムを作ろう思っています。 うまく作れずエラーばかり起きてしまいます。 どうか教えて下さい。お願いします。
- 締切済み
- 専門学校
- 加減剰余を筆算で表示したい
加減剰余を筆算の形式で表示するプログラムを作りたいんです。でも、割り算と掛け算は中途計算も表示しなくてはならなくてどうやっていいのかわかりません。関数を使用して作りたいんですが・・・ご助力お願いいただければと思います。
- ベストアンサー
- C・C++・C#
- 初心者です。for文、if文を使って10進数を2進数に変換したいです。
入力された10進数の数値を2進数に変換する、プログラムを教えてください。 仕様がありまして、2進数を求めるには、入力された10進数の数値を、for文とif文を使用し商が0になるまで2で割り、2進数の値を求め、表示させなければいけません。 ご教授お願いいたします。
- 締切済み
- C・C++・C#
補足
足し算の方法ですね、大変参考になりました。引き算、掛け算はこのプログラムを参考にして何とかなりそうです。しかし、割り算の方法がすっかりお手上げです。ご面倒ですが、割り算の方法をご教授いただけましたら幸いです。