掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
*を使わずに掛け算の結果を出すには? (ID:50011)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初めまして、新参と申します。 掛け算を筆算でやるとき,掛ける側を一桁ずつ計算して足しますよね。 同じ事を1ビット単位でやれば可能です。 [ex: 45 * 5] 45 = 0x2D = 00101101 B 5 = 0x05 = 00000101 B ---------- 00101101 00000000 00101101 00000000 00000000 00000000 00000000 00000000 --------------- 000000011100001 B = 0xE1 = 225 forループと +, << 演算子で計算可能です。 << は乗算みたいなもんだから使っちゃダメということでしたら (a + a) == (a << 1) ということで…。 long mlt(long a, long b) { long data, bit; for( data = 0, bit = 1 ; bit ; bit <<= 1, a <<= 1 ) { if((b & bit) != 0) data += a; } return data; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.