备忘:比较两个整数的大小,但是不能使用任何比较操作符

本文提供了一道使用C语言编写的面试题目解答示例,通过命令行参数比较两个整数的大小,并根据结果输出相应的比较关系。代码展示了如何利用位运算进行数值比较,同时给出了整数最大值和最小值的打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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格式还是如此。罢了,直接写进来得了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值