二进制(binary system):
1、计算机均使用二进制
二进制与10进制之间的转换
1.因为10进制用于计数,二进制也用于计数,转换是指,
表示相同个数的时候,10进制的数字和二进制的数字
是相当的双字
2.计算机内部处理的是二进制的,编程语言将19进制
转换为二进制交给计算机处理,编程语言给使用者留下的
错觉,计算机能直接处理10进制
5/5/2017 5:17:14 PM
java中所有的println()军师转换为字符串输出
内部均是转换为二进制进行运算
Integer.parseInt()
Integer.toString()
SYstem.out.println(Integer.toBrinaryString);
二进制转换
168 =
128 64 32 16 8 4 2 1
1 0 1 0 1 0 0 0
###补码:
###16进制:
2进制书写非常麻烦、不变,使用16进制对2进制进行简写
16进制的1位数,可以简写2进制的4位数
16进制大大简化2进制的简写形式
逢16进1
基数为:16
数制转换
因为使用10进制计数,2进制也可以用来计数转换是指,
当表示相同个时,10进制的数字和2进制数字是相当的数字
计算机内部是使用二进制进行处理的,
变成语言将10进制转换为二进制交给计算机处理变成语言给使用者留下错觉,
计算机可以直接处理10进制
补码:
是一种算法,已经被封装为方法
Integer.toString
0000 0001 0010 0011 0100 0101 0110 0111
1000 1001 1010 1011 1100 1101 1110 1111
0000
16个数字进行循环
0-1=-1
补码的特点:
1.补码最大值
int max = 0x7fff ffff
System.out.println(Integer.toBinaryString(max))
2.补码最小值
int min = 0x8000 0000
System.out.println(Integer.toBinaryString(min));
3.-1的补码:
int n = -1;
System.out.println(Integer.toBinaryString(n));
//11111111111111111111111111111111
4.-1的16进制缩写
int n = -1;
System.out.println(Integer.toHexString(n));
//ffffffff
5.溢出规律:
溢出结果不是随机数
n = (max+1) * 2 + n
溢出可能是正数也可能是负数
经典面试题:
int n = Integer.MAX_VALUE;
System.out.println(Integer.toBinaryString());
结果:31个1
补码的对称现象
-n = ~n + 1
java 中在底层运算的只有int,short,byte是int的变形其本质依然是int
二进制运算
按照2进制的每一个位进行计算的运算符
~取反
>>>逻辑右移位运算
规则:将数据的每一位向右移动
代码:
int n = 50;
int m = n>>1;
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toBinaryString(m));
<<<左移位运算
代码:
int n = 50;
int m = n<<1;
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toBinaryString(m));
移位运算的数学意义
引子:移动小数点进行运算
如上规则在二进制中依然成立,在二进制中数据向左移动一次,数据X2
>>数学右移运算
运算规则:当正数情况下,左侧补零
当负数时,左侧补一,保持符号不变
移位运算的用途
将一个数存入/读取出来
RandomAccessFile raf = new RandomAccessFile(..)
int b1 = raf.readInt();
raf提供了(算法)封装了整数的读写方法
###&与运算
将两个数据对其的位进行“与”运算
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
案例:
n = 01101101 10110111 10110110 11100101
mask = 00000000 00000000 00000000 11100101
00000000 000000000 00000000 11100101
代码:
int n = 0x6db7b6e5;
int mask = 0xff;
int m = n & mask;
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toBinaryString(mask));
System.out.println(Integer.toBinaryString(m));
//1101101101101111011011011100101
//11111111
//11100101
掩码运算:
- 用于将数据的一部分截取出来
- 掩码运算结果是2整数次幂余数