1、二进制(binary)、16进制、八进制
1.1、基本概念
- 逢2进1
- 数字:0 1
- 基数:2
- 权:128 64 32 16 8 4 2 1
- 从Java7开始,有了二进制的前缀0b,区分每四位时写个下划线分割,不加前缀代表十进制;
Integer类方法输出指定的十进制数字转换为二进制数
public static void main(String[] args) {
int a = 5;
Integer b = Integer.valueOf(5);
System.out.println(Integer.toBinaryString(a));
a++;
System.out.println(Integer.toBinaryString(a));
//二进制高位的0会被忽略
System.out.println(b);
}
1.2、16进制
作用:缩写二进制,简化书写;
前缀:0x;表示该数字是16进制;
16进制转化二进制:从低位开始,每四位缩一次;四位二进制对应十进制最高数是15,对应16进制每一个位的数,比如1111,对应16进制
int a = 0x292def68;
int b = 0b0010_1001_0010_1101_1110_1111_0110_1000;
1.3、8进制
前缀:0;注意八进制最大的数是7,不能有8、9;
int c = 067;
System.out.println(c); //55
1.4、补码----计算机处理有符号数的一种编码方式;
数据的正负数:最高位以0开头为正数,以1为负数;因此看正负要先把位数补全,看最高位;
溢出:计算的时候如果超过数据类型的最高位,数据会进一位,但是高位的数会被舍弃;如int型,后面32位全部填满后再加1,高位进1,后面全部变0,但高位舍弃,这样数据就变成32个0的数,形成一个随着数据的增加的循环;
int max = Integer.MAX_VALUE;
System.out.println(Integer.toBinaryString(max));//1111111111111111111111111111111
System.out.println(max);//2147483647
int min = Integer.MIN_VALUE;
System.out.println(min);//-2147483648
System.out.println(Integer.toBinaryString(min));//10000000000000000000000000000000
二进制转十进制
- 正数:所有为1的权数相加
权: 32 16 8 4 2 1
二进制: 1 1 0 1 0 1
十进制: 32+16+4+1----------------53
权: 32 16 8 4 2 1
二进制: 0 0 1 1 0 1
十进制: 8+4+1--------------------13
权: 32 16 8 4 2 1
二进制: 1 0 0 1 1 1
十进制: 32+4+2+1-----------------39
- 负数:用-1减去0位置对应的权
-1:111...111;(总共32位)
-8:111...011;
-149:111...01101011;
-2147483648(最小数):100...000;
互补对称现象
-n = ~n+1--------取反加1
设 n = -5;
n = -5 = 111...11011;
~n = 4 = 000...00100;
~n+1 = 5 = 000...00101;
设 n = 10;
n = 10 = 000...01010;
~n = -11 = 111...10101;
~n+1 = -10 = 111...10110;
互补对称图
最小负数减1 = 最大正数 ---------- 最小正数0减1 = 最小负数-1(位数超过范围,会自动忽略超过范围的高位数);
1.5、位运算
- 取反:~
- 0变1,1变0
- 与运算:&
- 见0则0,主要用于掩码运算:存储指定位数,位数对应与掩码位数;掩码位数:从低位开始,1的个数称为掩码的位数;
int n = 0x179d5d9e;
int m = 0xf00f0;
int z = n&m;
System.out.println(Integer.toHexString(z)); //d0090
- 或运算:|
- 见1则1,主要用于两个数的错位合并 ,如果两个数的位数是一样的话就不能合并了;
int x = 0x8a94;
int y = 0xaa0065;
int plus = x|y;
System.out.println(Integer.toHexString(plus)); //aa8af5
- 右移位运算:>>>
- 将2进制数整体向右移动,低位自动溢出舍弃,高位补0;
- 它数学值等于将数除于2,移动n位就除于2的n次方;
int a =0x6a7ad9f;
int b =a>>>2;
System.out.println(Integer.toHexString(b));//0x353d6c
- 左移位运算:<<
- 将2进制数整体向作移动,高位自动溢出舍弃,低位补0;
- 它数学值等于将数乘于2,移动n位就乘于2的n次方;;
a = 0xad20c67; //0x56906338
b = a<<3;
System.out.println(Integer.toHexString(b));
2、File类
2.1、新建文件路径并访问文件属性(还没有建文件,这里只指向了硬盘本身已有的一个文件)
public class FileDemo1 {
public static void main(String[] args) {
/*
尽量使用相对路径,而不是使用绝对路劲,减少不同系统间带来的错误
*/
File file