二进制学习记录

二进制(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

掩码运算:

  1. 用于将数据的一部分截取出来
  2. 掩码运算结果是2整数次幂余数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值