700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 十进制转换为二进制(java)

十进制转换为二进制(java)

时间:2023-09-09 20:42:37

相关推荐

十进制转换为二进制(java)

方法一: 主要通过辗转相除法实现,既 不断除二求余数的过程,但是需要注意正负数。

public class Number2Binary {public static void main(String[] args) {Scanner input = new Scanner(System.in);while (true){System.out.print("input a number:");int number = input.nextInt();int number2;// 如果是负数,需要加上2^31次方if (number < 0) {number2 = (int)(Math.pow(2,31) + number);}else{number2 = number;}String binary = "";// 通过辗转相除法,求出二进制数,保存在binary中int shang = number2;int yu ;int count = 0;while(shang != 0) {yu = shang % 2;shang /= 2;count++;if (count % 4 == 0) {binary = "_" + yu + binary;} else {binary = yu + binary;}}// 不够32位,需要补齐while(count < 31){count++;if(count % 4 == 0 ){binary = "_" + 0 + binary;}else {binary = 0 + binary;}}//判断符号位if(number < 0 ){binary = 1 + binary;}else {binary = 0 + binary;}System.out.println(binary);}}}

测试案例

方法二:通过位移的方式

从最高位的数移至最低位(移31位),除过最低位其余位置清零。

使用1与移位后的数字相&,是为了拿到最低位的数字。

使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 。

public static void binaryToTwo(int n) {for (int i = 31; i >= 0; i--)System.out.print(n >>> i & 1);}

-2的二进制 :1111_1111_1111_1111_1111_1111_1111_1110-2 >>> 31 : 1111_1111_1111_1111_1111_1111_1111_1110 -2 >>> 31 & 1 = 1-2 >>> 30 & 1 = 1-2 >>> 0 & 1 = 0

说明:在计算机中负数是按照补码输出,既 负数的补码 = 源码取反(符号位不变) + 1;

位运算的知识点补充: 知识点补充

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。