📄 calculate.cpp
字号:
#include <iostream.h>
int add(int a,int b)
{
int r = 0;
int c = 0;
for(int i=1;i != 0;i<<=1)
{
r |= (a^b^c) & i;
c = (((a&b) | (b&c) | (a&c)) & i)<<1;
}
return r;
}
int sub(int a,int b)
{
int r =0;
int c= 0;
for(int i=1;i!=0;i<<=1)
{
r |= (a^b^c) & i;
c = ((~a&(b|c)) | (a&b&c))<<1;
}
return r;
}
int mul(int a,int b)
{
int r = 0;
for(int i=1;i!=0;i<<=1,a<<=1)
{
if (b & i)
r = add(r,a);
}
return r;
}
float div(int a,int b)
{
int r = 0;
if (b == 0)
{
if (a == 0)
{
r = 0xffc00000;//-1.#IND0
}
else
{
if(a < 0)
r = 0xff800000;//-1.#INF0
else
r = 0x7f800000;//1.#INF0
}
}
else if(a != 0)
{
int sign = 0;
if (a < 0)
{
sign =1;
a = -a;
}
if (b < 0)
{
sign ^= 1;
b = -b;
}
int ext = 127;
int bit = 0x40000000;
while((a&bit)==0)
{
a <<= 1;
ext = sub(ext,1);
}
while((b&bit)==0)
{
b <<=1;
ext = add(ext,1);
}
unsigned x = (unsigned)a;
unsigned y = (unsigned)b;
if (x < y)
{
ext = sub(ext,1);
x<<=1;
}
for(bit=1<<23;bit>0;bit>>=1)
{
r <<= 1;
if (x >= y)
{
x = sub(x,y);
r |= 1;
}
x <<= 1;
}
if (x >= y)
{
r = add(r,1);
if ((r & 0x1000000) != 0)
{
ext = add(ext,1);
r >>=1;
}
}
r = (sign << 31) | (ext<<23) | (r & 0x7fffff);
}
return *(float*)&r;
}
void main()
{
cout<<add(4,6)<<endl;
cout<<sub(9,6)<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -