【Java基础之三】Java基础进制以及相互转换

计算机语言本质存储为1和0的二进制,但常用的还有八进制、十进制、十六进制等进制类型数据。由于生活中大家对十进制的接触最多、也最了解,所以本文不在对十进制进行赘述。

二进制

1、二进制初见

  • 二进制是以0和1为码,逢2进1,比如3(十进制)=11(二进制)=1*2+1。
  • 在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示。
  • 在Java语言中byte代表最小计量单位,byte由8位2进制数组成。

2、二进制与编码

  • 一般对英文字符而言,一个字节表示一个字符,但是对汉字而言,由于低位的编码已经被使用(早期计算机并不支持中文,因此为了扩展支持,唯一的办法就是采用更多的字节数)只好向高位扩展。
  • 一般字符集编码的范围 utf-8>gbk>iso-8859-1(latin1)>ascllascll编码是美国标准信息交换码的英文缩写,包含了常用的字符,如阿拉伯数字,英文字母和一些打印符号,请注意字符和数字的区别,比如'0'字符对应的十进制数字是48。
  • unicode编码包含很多种格式,utf-8是其中最常用的一种,utf-8名称的来自于该编码使用8位一个字节表示一个字符。对于一个汉字而言,它需要3个字节表示一个汉字,但大中华地区人民表示不服,搞一套gbk编码格式,用两个字节表示一个汉字。

3、二进制相关计算

(1)、二进制按位运算 &

 // 与运算: 0与任何数字运算为0,只有两个1与运算才为1

 1 & 1 = 1 

 0 & 1 = 0 

 51 & 5  即 0011  0011 & 0000  0101 =0000 0001 = 1

(2)、按位运算 |

// 或运算: 1与任何数字进行或运算都为1,只有两个0进行或运算才为0

1 | 0 = 1

1 | 1 = 1

0 | 0 = 0  

51 | 5 即 0011  0011 | 0000  0101 =0011  0111 =55

(3)、异或运算 ^

// 异或运算: 两个位的值不同,则结果为1,相同结果为0

1 ^ 1 = 0

1 ^ 0 = 1   

0 ^ 0 = 0

51 ^ 5 即 0011  0011 ^0000  0101 =0011  0110=54

(4)、<<左移运算符

将一个运算对象的各二进制位全部左移若干位(左边的二进制丢弃,右边补0)
 

11 << 2 = 44

-14 <<2 =-56

-14的二进制(11111111  11111111  11111111 11110010)左移2位

            为       11111111  11111111  11111111  11001000

        结果为(-56)

负数在二进制中如何表示(负数以正数的补码表示

原码:一个整数按照绝对值的大小转化成二进制的数

反码:将二进制数按位取反

补码:反码加 1 

以-14 举例

原码 14             即 00000000  00000000  00000000  00001110

反码                   11111111  11111111  11111111  11110001

补码                   11111111 11111111  11111111  11110010

所以-14  的二进制是     11111111 11111111  11111111  11110010

 假设 我们得到  二进制让我们求整数 就是倒着来取相反数

二进制是                11111111  11111111  11111111  11110010

得到反码减1             11111111  11111111  11111111   11110001

原码                   00000000  00000000  00000000   00001110


即  1110  = 14  所以取反  就是-14

(5)、>>右移运算符

将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1.

4 >> 2 = 1;

-14 >> 2 = -4;

八进制

八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。

Java语言在声明一个数字为八进制时,需要在数字前面加0,即(0123表示为八进制,但123标识十进制)

int   a   =   100;  // 表示为十进制100

int   a   =   0144; // 表示八进制100

千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法

由于八进制在以后的开发中使用的并不是很多,所以在此只给大家做一个简单的介绍,有兴趣的读者可以自行学习。

十六进制

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字

注意:十六进制逢十六进一,一般情况下,计算机1对6进制数也会和10进制相混。

16进制数必须以   0x开头。比如   0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)

 int   a   =   0x100F;  

 int   b   =   0x70   +   a;  

进制之间的转换(Java API)

 1、十进制转换其他进制算法

int number = 25;
		
//十进制转成十六进制:
String a = Integer.toHexString(number);
System.out.println(a);    //19

//十进制转成八进制
String b = Integer.toOctalString(number);
System.out.println(b);    //31

//十进制转成二进制
String c = Integer.toBinaryString(number);
System.out.println(c);    //11001

2、其他进制之间的转换

String binary = "101011";

//二进制转十进制
Integer.valueOf(binary, 2).toString(); // 43
//二进制转八进制
Integer.toOctalString(Integer.parseInt(binary, 2)); // 53
//二进制转十六进制
Integer.toHexString(Integer.parseInt(binary, 2)); // 2b


String octal = "520";

//八进制转成十进制
Integer.valueOf(octal, 8).toString(); // 336
//八进制转成二进制
Integer.toBinaryString(Integer.valueOf(octal, 8)); // 101010000
//八进制转成十六进制
Integer.toHexString(Integer.valueOf(octal, 8)); // 150

String hex = "FA";

//十六进制转成十进制
Integer.valueOf(hex, 16).toString();
//十六进制转成二进制
Integer.toBinaryString(Integer.valueOf(hex, 16));
//十六进制转成八进制
Integer.toOctalString(Integer.valueOf(hex, 16));

最后,进制问题会贯彻到整个计算机的脉络,本篇仅仅是一个简洁方便以后对Java学习有所帮助!!

上一篇:  【Java基础之二】JDK安装及环境变量配置                        

下一篇:

猜你喜欢

转载自blog.csdn.net/dgxin_605/article/details/85010628