本帖最后由 ryxcaixia 于 2015-7-25 22:49 编辑
// 先不考虑模板函数
// 函数功能: 打印一个整数型的补码(支持负数)
void OutputComplement(int num)
{
for (int i = 31; i >= 0; i--) // 一个整数是32位, 自然要循环32次, 当然更重要的是从最低位开始打印.
{
int tmp = num >> i; // 我们想要从他的最低位开始打印, 为了获得最低位, 要将这个32位的整数右移31位, >> 这是里位移命令
// 然后第二次循环就会获得他的第2位..依次类推
tmp &= 1; // 获得到当前位后 与 1进行与操作, 取得当前位的真实数值, 因为 0 & 1 == 0, 1 & 1 == 1(如果想强制置1, 那么进行的都是或操作, 之前楼主不是经常弄int:9这样么 编译器的汇编代码就是将最低9位全部与1进行与操作)
printf ("%d", tmp); // 然后打印出来当前的最低位
if (i % 4 == 0)
printf (" ");
}
printf("\n");
}
#include <stdio.h>
int main()
{
OutputComplement(10); // 这里可以看到 正 10 和 负 10 的真实补码
OutputComplement(-10);
return 0;
}
|