zoukankan      html  css  js  c++  java
  • 面试常见题

      这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/)

        

  • 相关阅读:
    macOS 在终端中使用 adb命令,每次都要source ~/.bash_profile 才生效
    判断一个数是奇数还是偶数?
    使用SQL Server 扩展事件来创建死锁的跟踪
    sql server阻塞(block)处理
    sqlserver的CTE实现递归查询
    sqlserver 行转列
    sqlserver字符串多行合并为一行
    git alias 配置别名,让命令更简洁,提高效率
    vim 快捷键
    Git bash 命令行中的快捷键
  • 原文地址:https://www.cnblogs.com/czx1/p/5471251.html
Copyright © 2011-2022 走看看