算法学习(一)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#
上一篇: 移位操作摘要
下一篇: 头像的截取 包括相册和相机