java - 确保对严格正多头的异或运算仅产生严格正多头

标签 java binary binary-operators

我想确保对严格正多头进行的异或运算只会产生严格正多头。

我的问题基于以下java代码:

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Random;

public class Test {

    static Random r = new Random();

    static class Data {
        long id = Math.abs(r.nextLong());

        @Override
        public String toString() {
            return "Data {" + "id=" + id + '}';
        }
    }

    public static void main(String[] args) {
        List<Data> data = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            data.add(new Data());
        }

        final String password = "don't you ever tell them";

        byte[] passwordBytes = password.getBytes();
        long[] passwordLongs = new long[passwordBytes.length / 8];

        for (int i = 0; i < passwordLongs.length; i++) {
            ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
            byte[] chunk = new byte[Long.BYTES];
            System.arraycopy(passwordBytes, i * Long.BYTES, chunk, 0, Long.BYTES);
            buffer.put(chunk);
            buffer.flip();//need flip
            passwordLongs[i] = buffer.getLong();
        }

        System.out.println(data);

        ListIterator<Data> encryptIterator = data.listIterator();
        while (encryptIterator.hasNext()) {
            Data next = encryptIterator.next();
            next.id = next.id ^ passwordLongs[(encryptIterator.nextIndex() - 1) % passwordLongs.length];//XOR here
        }

        System.out.println(data);
    }
}

有人可以通过一些理论提供答案吗?

最佳答案

  • 不变式 1:正整数的最高有效位为零。

  • 不变式 2:0 异或 0 = 0。

结论:正整数异或正整数=正整数。

关于java - 确保对严格正多头的异或运算仅产生严格正多头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931867/

相关文章:

java - RPG调用Java,java.lang.NoClassDefFoundError

java - 处理 Java 小程序关闭的正确方法是什么?

Python 2.7.11 : How to read (big) binary file from/at hex offset

c++ - 知道哪个编译器用 C++ 生成特定的二进制文件至关重要吗?

C反向二进制

c++ - 解析树中的一元和二元减法

java - 创建目录

java - Enterprise Java Bean(EJB) 和 Entity Java Bean 有什么区别?

c - 使用按位运算符时出现段错误

ios - 二元运算符 '==' 不能应用于类型 'Any?' 和 'String' Swift iOS 的操作数