Java中的二进制

计算机看似能干很多活,其实也很笨,只认识0和1。因为电路的逻辑只有0和1两个状态,这里的0和1并不是数字的0和1,0和1是表示两种不同的状态,0表示低电平,1表示高电平。计算机是由无数个逻辑电路组成的,通过0和1的无限位数和组合来表达信息。也就是说,计算机是采用二进制来表示数据的。为了说清楚二进制,先说一下我们生活中常用的十进制,十进制看起来很简单,那是因为我们从小接受的就是十进制的教育:
在这里插入图片描述
这是一个普通的十进制数,八十三万七千零五十六,这个数字可以表示如下:
在这里插入图片描述
再来看看二进制
在这里插入图片描述
这是一个二进制数101011,这个数字可以表示如下:
在这里插入图片描述
和十进制一样,只不过把底数(幂)从10变成了2,用十进制表示二进制里的101011就是43。有一点Java基础的人,都知道int类型在Java中是占4个字节的,1个字节8位,43表示如下:

在这里插入图片描述
其中每段为1个字节,一个字节是8位,首位表示符号位。在Java中,负数是用补码来表示的,也就是其绝对值取反加1得到的,并用首位来标识符号位为负数,看一下-43是怎么表示的:

  1. 先取反,取反其实很简单,就是0变1,1变0
    在这里插入图片描述
  2. 加1
    在这里插入图片描述
    相信看到这里,大家就知道为什么int能表示的最大数和最小数分别是2147483647和-2147483648了。先看int的最大值2147483647,二进制是这样表示的,原来并不是定义的,只是说实在装不下了
    在这里插入图片描述
    再看看int里的最小值-2147483648,二进制是这样表示的
    在这里插入图片描述
    写到这儿了,再扩展一下知识点吧,来看一下32位的int类型转换成16位的short类型时,系统是怎么转换的,随手写了一个二进制数,相当于十进制的20080557
    在这里插入图片描述
    准备转换,截掉前面的16位
    在这里插入图片描述
    取后面的16位,并把第1位变为符号位
    在这里插入图片描述
    强制转换以后,十进制的20080557变成了十进制的26541,怎么样,简单吧。

有人说,好麻烦,每次都要这么算吗?不用担心,Java提供了丰富的API来供我们使用,我们写一段代码来测试一下

public static void main(String[] args) {
	System.out.println("int最大正数:" + Integer.MAX_VALUE);
	System.out.println("int最大正数二进制表示:" + Integer.toBinaryString(Integer.MAX_VALUE));
	System.out.println("int最小负数:" + Integer.MIN_VALUE);
	System.out.println("int最小负数二进制表示:" + Integer.toBinaryString(Integer.MIN_VALUE));
		
	System.out.println("二进制定义打印int能表示的最大数:" + 0b01111111_11111111_11111111_11111111);
	System.out.println("二进制定义打印int能表示的最小数:" + 0b10000000_00000000_00000000_00000000);
		
	System.out.println("43的二进制表现:" + Integer.toBinaryString(43));//结果省略了前面的0
	System.out.println("-43的二进制表现:" + Integer.toBinaryString(-43));

	//下划线无意义,只是为了方便看,可以随意写
	int a = 0b00000000_00000000_00000000_00000000_00101011;//0b表示为二进制,a相当于十进制的43
	int a1 = 0b101011;//这也是十进制的43,只不过省略了上面的0
	System.out.println("打印a的值:" + a);
	System.out.println("打印a1的值:" + a1);
	int b = 0b11111111_11111111_111111111_1010101;//二进制43取反加1,变成-43,下划线无意义
	System.out.println("打印b的值:" + b);
		
	int i = 0b00000001_00110010_01100111_10101101;//随手写了个十进制的24274861
	System.out.println("打印10进制的i:" + i);
	System.out.println("打印强制转换为short的i:" + (short)i);
	System.out.println("打印short的二进制表示:" + Integer.toBinaryString((short)i));
}

最后我们来看一下结果
在这里插入图片描述
整理了一个表格,帮大家回顾一下Java中的四种整形,byte,short,long这三种类型本文就不详细解说了,其中API的调用都是一样的

在这里插入图片描述
思考以下代码执行结果,结合本文中的图片一起看

System.out.println(Integer.MAX_VALUE + 1);
System.out.println(Integer.MIN_VALUE - 1);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值