面试问算法,转补码怎么写? 整数还比较简单,负数有点卡壳,今天搜一下,发现一个很巧妙的写法(主要是比较短,2333)
转自:https://blog.csdn.net/wyt734933289/article/details/72889835
#include <cstdio>
int main()
{
int num[20], cnt = 0;
short a = -4321; //0001 0000 1110 0001 1110 1111 0001 1110
//short a = 4321;
unsigned short b = a; // 0011 0000 1110 0001 1100 1111 0001 1110
printf("%hx\n", b); //61215 1110 1111 0001 1111
while(b)
{
num[cnt++] = b & 1;
b >>= 1;
}
for(int i = cnt - 1; i >= 0; i--)
printf("%d ", num[i]);//结果可与2018王道计组复习P45页对比
return 0;
}
关于为什么要加上unsigned,原文章讲的还比较清楚,个人的一些理解,在计算机中数字以补码形式保存,然后unsigned是用来避免算数右移时,读取符号位出现错误。