c语言编写2阶booth算法,关于Booth算法的C语言实现

[C] 纯文本查看 复制代码#include

#define uint unsigned int

void Output(uint p,int bits,bool dot)

{

for(int i = bits;i >= 0;i--)

{

putchar(((p >> i) & 0x01) + 0x30);

if((i == bits - 1) && dot)

{

putchar('.');

}

}

}

void OutputLine(int bits)

{

for(int i = bits + 1;i >= 0;i--)

{

putchar('-');

}

putchar('\n');

}

int booth(int x,int y,int bits)

{

uint result = 0;

int z = 0;

bits++;

y <<= 1;//尾部填补0

putchar(' ');

Output(0,bits,true);

putchar('\n');

for(int i = 0;i < bits;i++)

{

putchar('+');

uint t = (((int)(y & 0x01)) - ((int)((y >> 1) & 0x01))) * x;

Output(t,bits,true);

putchar('\n');

OutputLine(bits);

z += (int)t;

//这里是模仿指定位的计算中的符号位修正,使其兼容X86指令集的计算方式

if((z & (1 << bits)) == 0)

{

z &= ((1 << (bits + 1)) - 1);

}

putchar(' ');

Output(z,bits,true);

putchar('\n');

y >>= 1;

result >>= 1;

result |= ((((uint)z) & 0x01) << 31);

if(i < (bits - 1))

{

z >>= 1;

putchar('>');

Output(z,bits,true);

putchar('\n');

}

}

if((z & (1 << bits)) != 0)

{

z |= ~((1 << (bits + 1)) - 1);

}

result = ((((uint)z)) << (bits - 1)) | ((result >> (32 - bits)) & ((1 << bits) - 1));

OutputLine(bits);

Output(result,bits + bits - 1,true);

putchar('\n');

return result;

}

int main()

{

booth(0x0A,-0x06,4);

return 0;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值