• 面试常见题


      这2个题比较简单,但是如果没想到还是做不出来的,请不要小看它。。

    1.不通过比较找出2个数中的较大值(较小值)

      方法一:通过位运算来实现

        max=a - ((a - b) & ((a - b) >> 31));

      方法二:就是通过数学公式

        max = ((a+b)+|a-b|)/2;

      求较小者时:a+b-max即可。

    2.不通过中间变量实现交换2个变量的值

      方法一:加减法原则

        a=a+b;

        b=a-b;

        a=a-b; 

      方法二:乘除法原则(b!=0,并且此方法容易造成溢出,不推介使用)

        a=a*b;

        b=a/b;

        a=a/b;

       方法三:异或法

        a^=b;

        b^=a;

        a^=b;

        方法四:在代码中嵌入汇编代码的方法(避免了临时变量的引入,但究其本质还是会使用额外的存储空间

        (1)使用xchg指令,这也是比较直观、容易想到的方法,因为xchg指令的功能就是交换源操作数和目的操作数的值,这里要使用额外寄存器来暂存变量。

          内嵌汇编代码如下:

                   _asm

                      {

                           mov eax,a

                           xchg b,eax

                           mov a,eax

                      }

        (2)使用额外的栈。这里使用反向的出栈顺序来完成交换。

          内嵌代码有如下两种形式:

               _asm

                   {

                         push a

                         push b

                         pop a

                         pop b

                   }

          另一种形式:

                   _asm push a

                   a = b;

                   _asm pop a

        (3)使用mov指令。这种方法使用额外寄存器来暂存一个变量的值。

               _asm mov eax,a

               a = b;

               _asm mov b,eax

      参看文档:Ronli (Http://Ronli.cnblogs.com/)

        

  • 相关阅读:
    DailyTick 开发实录 —— UI 设计
    CoreCRM 开发实录 —— 单元测试之 Mock UserManager 和 SignInManager
    CoreCRM 开发实录 —— 单元测试、测试驱动开发和在线服务
    CoreCRM 开发实录 —— Profile
    DailyTick 开发实录 —— 开始
    2016年年终总结
    centos7下mongodb4集群安装
    centos7下elasitcsearch7集群安装
    centos es2.x安装
    centos jdk切换
  • 原文地址:https://www.cnblogs.com/czx1/p/5471251.html
Copyright © 2020-2023  润新知