掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
「16の2乗」の結果が18になるのはなぜ? (ID:50115)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>奇妙と思われる現象に出くわしました。 見たところ,何も奇妙な点はありませんが。 >> wk1 = 16 ^ 1; >> wk2 = 16 ^ 2; >と実行してみると、 >wk1 = 17 >wk2 = 18 >という結果が返ってきます。 当然です。 ^はBitwise exclusive-ORを意味する演算子ですから。 ref) ISO/IEC 9899:1999 6.5.11 Bitwise exclusive-OR 累乗を計算するのには,math.hのpow関数を使います。 ref) ISO/IEC 9899:1999 7.12.7.4 The pow function 恐らく,VBのヘルプを見て勘違いしたのでしょう。 自分が見ているヘルプがVBのものかVC++のものかは区別した方がよいですよ。 でもって,変換関数の一例。 #デバッグを全くしていないので注意です。 /* xchar_to_int 16進数字を数値に変換 */ int xchar_to_int (char ch) { #if 1 /* ASCIIを仮定 */ if ('0' <= ch && ch <= '9') return ch - '0'; if ('A' <= ch && ch <= 'F') return ch - 'A' + 10; if ('a' <= ch && ch <= 'f') return ch - 'a' + 10; return -1; #else /* 汎用の場合 */ switch (ch) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'A': case 'a': return 10; case 'B': case 'b': return 11; case 'C': case 'c': return 12; case 'D': case 'd': return 13; case 'E': case 'e': return 14; case 'F': case 'f': return 15; } return -1; #endif } /* xstr_to_int 16進数字列を数値に変換 */ int xstr_to_int (const char * str) { int r = 0, t; int sign = 1; /* 符号フラグ */ if (str == 0) return 0; /* NULL チェック */ if (*str == '-') { /* 負の場合 */ sign = -1; ++str; } /* 変換処理 */ while ((t = xchar_to_int(*str++)) != -1) { r <<= 4; r |= t; } return r * sign; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.