C#プログラミング(十)---(整数乗算の代わりにシフトと加算を用いる方法)
2026 ワード
*プログラムの著作権とバージョン宣言部分*Copyright(c)2012、煙台大学コンピュータ学院学生*All rights reserved.
*作者:劉鎮*完成日:2012年10月19日*バージョン番号:3.010
*タスクおよび解法の説明
*問題の説明:整数乗算の代わりにシフトと加算演算を使用する方法
*コードセクション:
心得:
ははは、できた、もとはこのようにすることができます.やっとこの方法を思いついた.
例:
num *= 32; num<<=5;/*に等しい2の5乗は32*/
乗数が2のn次方でない場合、乗数をいくつかの2のn次方の和に分解することができます:num*=20;num*=(16+4)に等しい.
*作者:劉鎮*完成日:2012年10月19日*バージョン番号:3.010
*タスクおよび解法の説明
*問題の説明:整数乗算の代わりにシフトと加算演算を使用する方法
*コードセクション:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace shiftAdd
{
class Add
{
public int[] mark = new int[20];
public int num = 0;
public int m;
public Add()
{
for (int i = 0; i < 20; i++)
{
mark[i] = 0;
}
}
public void add()
{
for (int i = 0; m >= 2; i++)
{
mark[i] = m % 2;
num++;
m = m / 2;
}
mark[num] = 1;
num++;
}
public int shiftAdd(int n)
{
int all = 0;
this.add();
for (int i = 0; i < num; i++)
{
int save = 1;
if (mark[i] == 1)
{
save <<= i;
all += save;
}
}
return n * all;
}
}
class Program
{
static void Main(string[] args)
{
Add add = new Add();
add.m = 20;
Console.WriteLine(add.shiftAdd(5));
Console.ReadKey(true);
}
}
}
心得:
ははは、できた、もとはこのようにすることができます.やっとこの方法を思いついた.
例:
num *= 32; num<<=5;/*に等しい2の5乗は32*/
乗数が2のn次方でない場合、乗数をいくつかの2のn次方の和に分解することができます:num*=20;num*=(16+4)に等しい.