欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法学习(一)Java/C++分别实现获取二进制位为1还是0

程序员文章站 2022-06-01 12:11:54
...

Java代码实现

解释在代码注释中

package Demo1.Demo1_3;

import java.util.Scanner;

/*
    可以将一个1左移到相应的位置,将其与待判数字的二进制做 &(与)运算,
    然后再右移回来即可
    更简便的可以直接将待测数字移位后与 1做与运算
 */
public class Demo1_3_main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入待测数:");
        int number = input.nextInt();
        int num = 0;    // 定义 num,用来存储待测数的二进制位数
        int bit ;      //定义所要测的位置(从右向左)

        // 求该数二进制范围,所占位数为num
        // 对于正数不用求 num和 do循环也可以实现位判断,
        // 但是对于负数,其大于二进制的位数全为 1,因此用 num和 do循环进行约束
        while(Math.pow(2,num) <= Math.abs(number))       // 此处取number的绝对值,以防符号位的影响( num为 0)
            num++;
        do {
            System.out.println("请输入从右数第bit位:");
            bit = input.nextInt();
        }while(bit>num);
        System.out.println((number>>>(--bit))&1);
    }


}


C++代码实现

解释在注释代码注释中

include <iostream>
#include <cmath>	// abs和pow函数 
using namespace std;
int main()
{
	int number;
	cout<<"请输入待测数字:"<<endl;
	cin>>number;
	int num = 0; 	// 定义 num,用来存储待测数的二进制位数
	int bit; 		// 定义所要测的二进制位置(从右向左数)
	
	// // 求该数二进制范围,所占位数为num
        // 对于正数不用求 num和 do循环也可以实现位判断,
        // 但是对于负数,其大于二进制的位数全为 1,因此用 num和 do循环进行约束
    while(pow(2,num) <= abs(number)){				// 此处取 number的绝对值,以防符号位的影响
		num++;
	}
	do{
		cout<<"请输入从右数第bit位:"<<endl;
		cin>>bit; 
	}while(bit > num);
	cout<<(number>>(--bit)&1);
	system("pause");
	return 0;	
	
}  

好啦!这是自己在算法学习时所作的第一篇随笔,自己的解释和理解都写在代码的注释上面了,欢迎大家评论区进行指导!

欢迎各位网友转载,转载时请标明出处https://mp.csdn.net/mdeditor/87620076#

相关标签: 随笔