5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码

        大一寒假的时候我在学校里学C语言的补码时候学会了一种十进制换成二进制的方法,不知道学计算机的是不是也是这么算的,感觉比高中数学课教的那除2取余的方法快多了,而且容易掌握和不需要笔算。具体方法如下,我会先用例子演示:

        方法步骤就是先把十进制换算成16进制,再从16进制换算成二进制。(在我看来,十进制转成16进制很简单只要口算就可以了,是以这为基础的。别说你不会。。)

        eg. (十进制) 35 = 16 * 2 + 3 --> (十六进制) 0x23 -->( 二进制) 0010 0011

        eg. 100 = 16 * 6 + 4 -->  0x64 -->0110 0100

        eg. 1024 = 16 * 64 --> (需要进位64 = 16*4) 0x400 --> 0100 0000 0000

        看出规律了吗?因为16进制的每一位可以对应4位的二进制数,四位二进制数分别是8 4 2 1,比如说,16进制的3,就是2+1,就是0011,16进制的5,就是4+1,就是0101,意思就是说每一位16进制数都可以表示为8,4,2,1这四个数字的加和,若使用到,则该位为1不使用为0。我这么说可能十分不清楚,但也懒得去想更好的表达方法了,如果有人看不懂再说。

        那么按照这个规律,你现在可以来尝试算一下十进制的307等于多少。下面我会给出答案过程:

       307 < 16 * 20 , 307 = 16  * 19 + 3 --> (19 = 16 * 3) 0x133 --> 0001 0011 0011

       是不是一样呢? 8 4 2 1,你会算了吗?是不是比拿笔算什么余数方便而且快速多了,而且只要你熟练了之后,任何数拿来都可以快速进行换算,虽然二进制数好像没什么用,但看起来有点儿刁有没有哈?还可以用此来进行通信。。。呵呵呵= =

       最后,再检验一下,我们可以反过来算一遍,比如随便拿一个二进制数,0101 1111 1110 这个数换成十进制是多少呢?你肯定不会再拿笔来算各位成于2的n次方的加和吧,现在完全可以通过16进制来进行中转了,0101 --> 0x 5, 1111 --> 0x F, 1110 --> 0x E 所以其16进制就是 0x5FE = 5 * 16^2 + 15 * 16 + 14 = 1534, 是不是等于2^10 + 2^8 + 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 = 1534来得快呢?

       另外,要赶着去做实验了,所以以下直接贴出Java输出二进制的代码:(和语言无关,用C和C++也都可以一样这样写的),大家可以用下面的代码来检验上面的方法吐舌头

public class Binary {

	public static void main(String[] args) {
		
		//我自己写的方法,使用位运算符进行二进制转换
		int theNumber = 0xFFFFFFFF;//java中int类型占4个字节,所以以下的j的初始值为31
		for (int j = 31; j >= 0; j--) {
			if (((theNumber >> j) & 1) == 1) {
				System.out.print("1");
				if (j%4 == 0) {
					System.out.print(" ");//4个数空一格
				}
			}
			else {
				System.out.print("0");
			}
		}
		//使用Java自带的类进行二进制转换
		System.out.print("\n" + Integer.toBinaryString(theNumber));
	}
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值