看到这个题目的时候,我当时想到的,就是首先进行a-b,然后判断最高的符号位是1还是0。。我想大家也都会想到这一点:

int max(int a, int b)
{
int max[2] = { a, b };
return max[((a - b)&0x80000000) >> 31 ];   //与运算,将最高位的后面31位全部置为0,右移31位取出符号位
}

上面代码在一般情况下都能得出正确的结果,但是当a是int型的最小值,而b是int型的最大值的时,相减就会有越界,并且符号位丢失了。其实不用那么极端的例子,因为两个不同符号的数,相减很容易越界。所以我在这个代码的基础上,先判断a和b的符号位,增加限制(符号相同,就减,这样安全,没有问题;符号相反的话,如果a是正数,b是负数,直接得出最大值或最小值),于是就有了下面的代码:

#include "stdio.h"
#include "stdlib.h"
int Min(int a,int b)    //先判断符号位,符号相同的时候,两个数相减
{
return (((a >> 31 == 0) && (b >>31==1)) | (((a >> 31)^(b >> 31))==0)&&(((a-b)>>31)==0))? b:a;
//printf("%s\n",(((a >> 31 == 0) && (b >>31==1)) | (((a >> 31)^(b >> 31))==0)&&(((a-b)>>31)==0))?"a>=b":"a<b");
}
int main(void)
{
int a=0x80000000;     //int类型的最小值
int b=0x7fffffff;     //int类型的最大值
printf("%d\n",Min(a,b));
system("pause");
return 0;
}

不用比较运算符及循环控制语句,判断int型的a、b两数的大小相关推荐

  1. python不用中间变量交换值_不使用中间变量,交换int型的 a, b两个变量的值。

    不使用中间变量,交换int型的 a, b两个变量的值. 代码如下: //by ppchen var a = 10, b = 2; a = a + b; b = a - b; a = a - b; 代码 ...

  2. C语言 请使用short int型的变量计算两个7位十进制整数的和,要求使用尽可能少的变量

    请使用short int型的变量计算两个7位十进制整数的和,要求使用尽可能少的变量. (提示:需要输入四个数,分别是第一个数的前三位和后四位,第二个数的前三位和后四位.分别求和,注意后四位产生的进位. ...

  3. C语言练习题,short int型的变量计算两个7位十进制整数的和

    请使用short int型的变量计算两个7位十进制整数的和,要求使用尽可能少的变量. **输入格式要求:"a = %3hd%4hd, b = %3hd%4hd" **输出格式要求: ...

  4. c++基础学习(03)--(存储类,运算符,循环,判断)

    文章目录 目录 一.存储类 二.运算符 三.循环 while for 四.判断 目录 一.存储类 可见static存储类修饰之后,i的值没有从头开始,而是从上一次的结果中保留下来 #include & ...

  5. java中number类型能否相除_Java中 如果复数类成员是int型,怎么实现两个复数相除...

    (1) 复数类Complex 的属性有: RealPart :    int型,代表复数的实数部分 ImaginPart :  int型,代表复数的虚数部分 package applet; impor ...

  6. java 复数的除法_Java中 如果复数类成员是int型,怎么实现两个复数相除

    (1) 复数类Complex 的属性有: RealPart :    int型,代表复数的实数部分 ImaginPart :  int型,代表复数的虚数部分 package applet; impor ...

  7. Maria840js面试题:不使用中间变量,交换int型的 a, b两个变量的值

    群里面的人透漏一下,其实这个好像是好多语言都有的思路,很泛滥~(function(){ var a = 10, b = 2; a = a + b; b = a - b; a = a - b; aler ...

  8. 前端:JS/19/特殊运算符,运算符优先级,if条件判断语句,switch分支语句,while循环语句,for循环语句,break和continue循环控制语句,实例:九九乘法表

    特殊运算符 new运算符:创建一个对象.如:var today=new Date(); delete运算符:删除数组的元素,或者对象的属性: typeof运算符:一元运算符,主要功能:判断变量的类型的 ...

  9. scala几种循环判断语句_Scala循环控制语句– while,while和for循环

    scala几种循环判断语句 In software programming, certain situations may arise where we need to execute a block ...

最新文章

  1. Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf
  2. mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
  3. Console类浅谈
  4. java.util接口_函数接口– Java 8中java.util.function包中的函数接口
  5. C#中打开设计视图时报未将对象引用设置到对象的实例
  6. 万象双环设计+原色双影像极致体验 华为P50标准版9月29日正式开售
  7. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计
  8. 使用MongoDb连接数据库服务器
  9. 通达oa SQL注入day
  10. 免费好用的DiffMerge工具大总结
  11. HTML期末学生大作业 响应式动漫网页作业 html+css+javascript (1)
  12. Java 合并、拆分PDF文档
  13. LOJ-10105(欧拉回路模板,套圈法,递归)
  14. 直方图中bin的说明
  15. hadoop-bigdata-v2.2 版本shell脚本一键部署 master、slaver1、slaver2三个节点源代码.
  16. 设计必备,小清新钢笔字体包合集,优质字体合集
  17. 德邦首份上市年报:内部焦虑权衡论与外部攻守道
  18. java致谢_JAVA语言课程设计致谢例文.doc
  19. vue移动端调试工具
  20. 超导体的性质,不研究制备

热门文章

  1. 联邦家私:用宜搭一周上线售后管理系统,打通信息孤岛,提升协同效率
  2. 人工智阅读理解能力首超人类,阿里巴巴刷新世界纪录
  3. Python面向对象(二)
  4. 不悲观-不emo-永远保持正能量——21年末,去掉所有的不开心
  5. 全国 省市 自治区的数据库sql生成
  6. 不重复的随机数JAVA、C#·适合初级人员玩耍。
  7. OGG重复记录导致复制进程挂起
  8. 索引unusable|disable|enable
  9. unigui中TUniDBEdit的OnEndDrag问题
  10. 巨蟒python全栈开发flask11项目开始3