跳至主要內容

按位异或求结果

付硕辉2024年12月24日大约 1 分钟教学文档基础算法

计按位异或求结果

1.题目:

两个数按位异或是指将这两个数转换成二进制后,最低位与最低位异或作为结果的最低位,次低位与次低位异或作为结果的次低位,以此类推。

例如,3 与 5 按位异或值为 6 。

请问,有多少个不超过 整数n 的正整数,与 n 异或后结果小于 n 。

输入格式:

一个整数,作为n的值

输出格式:

一个整数,表示结果

输入样例:

2024

输出样例:

2001

2.分析:

按位异或操作的性质是:相同位上,相同数字异或结果为0,不同数字异或结果为1。假设n的二进制表示为bk,bk−1…b1,b0其中bk 是最高位。

确定x的范围为1<= x<=n,这意味着x在n 的最高位(即最左边的1)必须是0,因为如果x 在该位是1,那么n⊕x的结果将大于n.

所以一般的解法为暴力破解法,步骤为:首先,n 的二进制表示中最高位的1所在的位数。然后,计算2的k方,即n 的最高位所代表的值。最后,计算满足条件的x的数量:n−2的k方。

3.代码

import java.util.Scanner;


public class try9 {
    public static void main(String[] args) {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        int n;
        System.out.println("请输入整数N的值:");
        n=sc.nextInt();
        for (int x = 1; x < n+1; x++) {
            if ((x ^ n) < n) {
                count++;
            }
        }
        System.out.println(count);
    }

 }

上次编辑于: 2024/12/24 15:33:15
贡献者: 黄昱皓