在Linuxsir上看到的一道面试题,自己给出的一道答案,觉得还算满意
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int num1,num2;
int i = 0;
int tok =0;
char result[3][32];
if(argc != 3)
{
printf("Usage: cmp_int num1 num2/n");
exit(1);
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
sprintf(result[0],"%d = %d",num1,num2);
sprintf(result[1],"%d > %d",num1,num2);
sprintf(result[2],"%d < %d",num1,num2);
printf("The lagest int number is %d/n",~(1 << (sizeof(int) * 8 - 1)));
printf("The lest int number is %d/n",1 << (sizeof(int) * 8 - 1));
tok = (num1 >> 31) ^ (num2 >> 31); // = 0 if they have the same tok, else =-1;
i = (((num1 >> 31) & tok) * 2) + ((num2 >> 31) & tok) + ((((num1 - num2) & (~tok)) >> (sizeof(int) * 8 - 1)) * 2) + (((num2 - num1) & (~tok)) >> (sizeof(int) * 8 - 1));
printf("Result: %s/n",result[-i]);
return 0;
}
第一次用优快云的blog,本来想把上边的代码以“插入源代码”的方式放进来,结果弄了半天也不见成果——似乎不能换行,起初还以为是Linux的新行符和Windows下的不一致造成的,然后转换成DOS格式还是如此。罢了,直接写进来得了。

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int num1,num2;
int i = 0;
int tok =0;
char result[3][32];
if(argc != 3)
{
printf("Usage: cmp_int num1 num2/n");
exit(1);
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
sprintf(result[0],"%d = %d",num1,num2);
sprintf(result[1],"%d > %d",num1,num2);
sprintf(result[2],"%d < %d",num1,num2);
printf("The lagest int number is %d/n",~(1 << (sizeof(int) * 8 - 1)));
printf("The lest int number is %d/n",1 << (sizeof(int) * 8 - 1));
tok = (num1 >> 31) ^ (num2 >> 31); // = 0 if they have the same tok, else =-1;
i = (((num1 >> 31) & tok) * 2) + ((num2 >> 31) & tok) + ((((num1 - num2) & (~tok)) >> (sizeof(int) * 8 - 1)) * 2) + (((num2 - num1) & (~tok)) >> (sizeof(int) * 8 - 1));
printf("Result: %s/n",result[-i]);
return 0;
}
第一次用优快云的blog,本来想把上边的代码以“插入源代码”的方式放进来,结果弄了半天也不见成果——似乎不能换行,起初还以为是Linux的新行符和Windows下的不一致造成的,然后转换成DOS格式还是如此。罢了,直接写进来得了。
