计算机看似能干很多活,其实也很苯,只认识0和1。因为电路的逻辑只有0和1两个状态,这里的0和1并不是数字的0和1,0和1是表示两种不同的状态,0表示低电平,1表示高电平。计算机是由无数个逻辑电路组成的,通过0和1的无限位数和组合来表达信息。也就是说,计算机是采用二进制来表示数据的。为了说清楚二进制,先说一下我们生活中常用的十进制,十进制看起来很简单,那是因为我们从小接受的就是十进制的教育:

java二进制用什么接收 java 二进制数_java二进制用什么接收

这是一个普通的十进制数,八十三万七千零五十六,这个数字可以表示如下:

java二进制用什么接收 java 二进制数_java二进制用什么接收_02

再来看看二进制

java二进制用什么接收 java 二进制数_十进制_03

这是一个二进制数101011,这个数字可以表示如下:

java二进制用什么接收 java 二进制数_Java_04

和十进制一样,只不过把底数(幂)从10变成了2,用十进制表示二进制里的101011就是43。有一点Java基础的人,都知道int类型在Java中是占4个字节的,1个字节8位,43表示如下:

java二进制用什么接收 java 二进制数_java_05

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

1、先取反,取反其实很简单,就是0变1,1变0

java二进制用什么接收 java 二进制数_java二进制用什么接收_06

2、加1

java二进制用什么接收 java 二进制数_整型_07

相信看到这里,大家就知道为什么int能表示的最大数和最小数分别是2147483647和-2147483648了。先看int的最大值2147483647,二进制是这样表示的,原来并不是定义的,只是说实在装不下了

java二进制用什么接收 java 二进制数_java_08

再看看int里的最小值-2147483648,二进制是这样表示的

java二进制用什么接收 java 二进制数_java二进制用什么接收_09

写到这儿了,再扩展一下知识点吧,来看一下32位的int类型转换成16位的short类型时,系统是怎么转换的,随手写了一个二进制数,相当于十进制的20080557

java二进制用什么接收 java 二进制数_整型_10

准备转换,截掉前面的16位

java二进制用什么接收 java 二进制数_java_11

取后面的16位,并把第1位变为符号位

java二进制用什么接收 java 二进制数_十进制_12

强制转换以后,十进制的20080557变成了十进制的26541,

整理了一个表格,帮大家回顾一下Java中的四种整形,byte,short,long这三种类型本文就不详细解说了,其中API的调用都是一样的

java二进制用什么接收 java 二进制数_十进制_13

大家可以算一下 0x7FFFFFFF 是多少
每个十六进制数4bit,因此8位16进制是4个字节,刚好是一个int整型

F的二进制码为 1111
7的二进制码为 0111

这样一来,整个整数 0x7FFFFFFF 的二进制表示就是除了首位是 0,其余都是1
就是说,这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)

用 INT_MAX 常量可以替代这个值。

在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

C中int类型是32位的,范围是-2147483648到2147483647 。 
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; 
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; 
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; 
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。