zoukankan      html  css  js  c++  java
  • 字符串反转

    方法一:利用异或字符的数值进行反转实现字符的反转,该方法不使用额外的变量。

    package String;
    
    public class StringReverse {
        public static void main(String[] args) {
            String s="hello";
            System.out.println(new StringReverse().ReverseByXor(s));
        }
        public static String ReverseByXor(String original)
        {
            char[] charArray = original.toCharArray();
            int l = original.length() - 1;
            for (int i = 0; i < l; i++, l--)
            {
                charArray[i] ^= charArray[l];
                charArray[l] ^= charArray[i];
                charArray[i] ^= charArray[l];
            }
            return new String(charArray);
        }
    }

    使用异或交换数值的原理:

    大家都知道,假如有a,b两个整型数,我们可以用

    a^=b;
    b^=a;
    a^=b;

    来交换a,b的值,在这里我说说其中的原理:
    ^ 在 C 里面是按位异或操作符,相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:

    a = 0101   (5 的二进制表示)
    b = 1100   (12 的二进制表示)
        ----
    c = 1001   (结果为 9)


    可以看出 c 中是 1 的部分就是 a 和 b 二进制表示对应位不同的部分,0 则是相同的部分。

    牢记以下两条原则:
    任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
    任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

    因为 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那么 a 同 c 异或的结果就是 a 中与 b 不同的位发生变化,二进制数每位只有两种状态,所以 a 变成了 b:
    a = 0101
    c = 1001
        ----
    b = 1100


    同样, b 与 c 异或结果就变成了 a:
    b = 1100
    c = 1001
        ----
    a = 0101

  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/lyr2015/p/7420166.html
Copyright © 2011-2022 走看看