Java之二进制位运算以及相关面试题

本文详细介绍了计算机中为什么要使用二进制,以及二进制、16进制的概念和用途。讨论了补码的概念,以及如何求一个数的补码,并通过实例展示了Java中二进制位运算,包括取反、移位和逻辑运算,并提供了相关面试题的解析和解答。
摘要由CSDN通过智能技术生成

为什么要用二进制?

因为计算机从节省制造成本角度考虑,选择了二进制。因此计算机内存中一切数据都是以二进制存在的。

那么问题来了,为什么在Java中我们使用输出语句时显示在Consle窗口中的还是十进制的数呢?例如:

        int n = 6;
		System.out.println(n);

运行结果:6 。

在解释这个原因之前要先了解两个方法
①Integer.toString() 将内存中二进制数据转换为十进制输出

②Integer.parseInt() 将十进制字符串转换为二进制数据

原因: 通过查询源码知道在输出语句System.out,println()中它自动调用了Integer.toString() 。所以输出结果还是6。

什么是二进制?

逢二进一的计数规则。
例如int类型(32位)6的表示:
00000000 00000000 00000000 000000110

        int a = 6;
		System.out.println(Integer.toBinaryString(a));
		//运行结果:110
		//原因:计算机自动省略了前面的29个0。
	

什么是16进制?为什么要使用16进制?

逢16进1的计数规则:
逢16进1
数字:0 1 2 3 4 5 6 7 8 9 a(10) b (11 ) c(12) d(13) e(14) f(15)
十六进制数为了便于区分都是以0x开头。
使用十六进制的目的:
用于简写2进制,原因是2进制的书写过于冗长,2进制的每4位缩写为一个16进制数,按照这个规则可以将2进制进行简写。

记住:编程时,凡是需要书写2进制数据时,都采用16进制作为缩写。

比如int类型数为32位,如果用2进制表示则需要32位。
例:
0000 0000 0010 1010 1110 1111 1110 1010

使用16进制进行缩写结果为:
0 0 2 a e f e a 即:0x2aefea

        int  n = 0x2aefea;
        System.out.println(Integer.toBinaryString(n));
        //运行结果:10 1010 1110 1111 1110 1010(计算机自动省略了前面的10个0)

为什么要用补码?

补码可以理解为是一种用“正数”表示“负数”的“算法”。节省了硬件成本!!!

切记: 在Java中是使用补码来表示二进制负数的,在补码表示中,最高位为符号位,正数的符号位为0,负数1。

如何求一个数的补码?

正数的原码,补码,反码都一样。无需多说。
那么如何求一个负数的补码呢?例如:求-1的补码。
第一步:先写出1的原码(以8位为例):0000 0001
第二步:求这个原码的反码:1111 1110
第三步:补码就是给反码加1。即:1111 1111 。

            int  n = -1;
	        System.out.println(Integer.toBinaryString(n));
	        //运行结果:1111 1111 1111 1111 1111 1111 1111 1111
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值