zoukankan      html  css  js  c++  java
  • 不用额外空间实现两个变量(int 型)的交换

    这个问题不难,主要有两种方式实现。

    1):用“加减”运算实现

                int a = 100;
                int b = 200;
                a = a + b;  //300
                b = a - b;  //100
                a = a - b;  //200

    2):用“异或”运算实现

                int a = 1;
                int b = 10;
                a = a ^ b;  //0001 ^ 1010 = 1011 (11)
                b = a ^ b;  //1011 ^ 1010 = 0001 (1)
                a = a ^ b;  //1011 ^ 0001 = 1010 (10)

    这里简单的介绍一下“异或”运算符:(这里用的便是第6条)

    1. a ^ a = 0
    2. a ^ b = b ^ a
    3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
    4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
    5. a ^ b ^ a = b.
    6.若x是二进制数0101,y是二进制数1011
    则x^y=1110
    只有在两个比较的位不同时其结果是1,否则结果为0
    即“相同为0,不同为1”!
     
    输入
    运算符
    输入
    结果
    1
    ^
    0
    1
    1
    ^
    1
    0
    0
    ^
    0
    0
    0
    ^
    1
    1

    有异或运算,那一定有“同或”运算:

    1.“同或”是一个数学运算符。他应用于逻辑运算。 其运算法则为a同或b=ab+a‘b’(a'为非a)。
    真“同或”假的结果是假,假“同或”真的结果也是假,真“同或”真的结果是真,假“同或”假的结果是真。就是说两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为一,不同为零。
    2. 同或符号为⊙。(圆圈内为点)
    3. 同或和异或互为非运算。
    4. 同或公式:
    a⊙b=ab+a'b'(a'为非a,b'为非b);
    5. 同或表格(二进制
           
    a
    b
    a⊙b
    0
    0
    1
    1
    1
    1
    0
    1
    0
    1
    0
    0

    。。。。。

  • 相关阅读:
    c++STL容器之deque容器
    c++STL容器之vector容器
    c++STL容器之string容器
    c++之STL基本认识
    c++之类模板案例
    c++之类模板和友元
    c++之类模板分文件编写
    c++之类模板成员函数的类外实现
    c++类模板与继承
    c++之类模板对象作函数参数
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/3115027.html
Copyright © 2011-2022 走看看