华为最新编程题,关于复数的问题,就是一个复数由32位的整形构成,高16位代表实部,低16位代表虚部,就是正负号的问题,整了很久,挂了,太悲剧了。
#include <iostream>
using namespace std;
int a[] = {1, -1};
short int gethigh(long int num)
{
bool flag = false;
if(num<0)
{
flag = true;
num *= -1;
}
short int temp = num>>16;
return a[(flag?1:0)]*(temp & 0x7fff);
}
short int getlow(long int num)
{
if(num<0)
num *= -1;
return (num & 0x0007fff)*a[(num & 0x00008000)?1:0];
}
long int togeather(short int num1, short int num2)
{
bool flag1=false, flag2=false;
if(num1 & 0x8000)
{
flag1 = true;
num1 *= -1;
}
if(num2 & 0x8000)
{
flag2 = true;
num2 *= -1;
}
long int temp = 0;
num1 &= 0x7fff;
num2 &= 0x7fff;
temp = (num1<<16 | num2);
if(flag2)
temp |= 0x00008000;
if(flag1)
temp *= -1;