java中的二进制基础(慕课笔记)

一,十进制与二进制

生活中常见的进制 十进制、十二进制、十六进制、二十进制、六十进制、三百六进制

计算机 ---二进制----萊布尼兹---伏羲

二进制 十进制
基本数字 10个 0-9 2个 0-1
进位规则 十进一 二进一
权位 不同位置所代表的值不同 不同位置所代表的值不同

二,进制的相关概念

十进制 7 = 二进制 0111-----0*2^(3)+1*2^(2)+1*2^(1)+1*2^(0);

二进制

​ 计算机内部用二进制:运算简单,简化了计算机结构

八进制

​ 适用用12位和36位计算机操作系统 标志的开头用0表示,用0-7的数字表示

十六进制

​ 用0-9,A,B,C,D,E,F表示

​ 表示表达长度短,变得更常用,标志的开头用0X表示

三,进制的探索

二进制的位运算

直接对二进制的位直接进行操作

运算符 运算 示例
& 与运算 6&3=2
| 或运算 6|3=7
^ 异或运算 6^3=5
~ 反码 ~6=-7
<< 左移 3<<2=12 3*2*2=12
>> 右移 3>>1=1 3/2=1
>>> 无符号右移 3>>>1=1 3/2=1

优点

​ 特定情况下,计算方便,速度快,被支持面广

​ 如果用算术方法 速度慢 逻辑复杂

1.按位与 &

两位全为1 结果才为1

​ 0&0=0 0&1=0 1&1=1

特殊用法

​ (1)清零。与一个各个位全为0的数值相与,结果为0

​ (2)取一个数中指定位。

​ 设X=1010 1110 取X的低四位 ,X&0000 1111即可得到

2.按位或|

​ 有1为 1

常用来对一个数据的某些位 置1

3.与或运算

​ 相同为0 相反为1

​ 异或运算的特殊用途

​ (1)使特定位翻转 找到一个数 对应X要翻转的各位 该数对应位为为1,其余位为0 ,此数与X对应位异或即可。

例:X=1010 1110 使低四位翻转 ,用X^0000 1111=1010 0001

​ (2) 与0异或,保留原值

​ (3)两个变量值交换

​ 1,借助第三个变量来实现

​ C=A;A=B,B=C

​ 2.利用加减法实现两个变量的交换

​ A=A+B;B=A-B;A=A-B;

​ 3.用异或运算来实现 ,也是效率最高

​ 原理:利用一个数异或本身为0和异或运算符合交换律

​ A=A^B;B=A^B;A=A^B;

4.取反运算~

对一个二进制数按位取反

~1=0 ~0=1

5.左移运算<<

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

2<<1=4

若左移是舍弃的高位不包含1,则左移一位,相当于乘以2

6.右移运算 >>

将一个数的各个二进制全部右移若干位 ,正数补0 ,负数补1,右边丢弃。操作数每右移一位,相当于该除以2

​ 左补0 or 补 1 得看被移数是正还是负

​ 例 1:1=4>>2; 0100>>2 =0001

7.无符号右移运算>>>

各个位向右移 指定的位数 。右移后左边空出来的位用零来填充,移除的右边位被丢弃

负数以其正值的补码形式表示

原码

​ 一个数按照绝对值大小转换成的二进制数为原码

​ 例如 00000000 00000000 00000000 00001110是14的原码

反码

​ 将二进制数按位取反,所得的新二进制数称为二进制的反码

​ 例如 00000000 00000000 00000000 00001110 按位取反

​ 11111111 11111111 11111111 11110001 它们互为反码

补码

​ 反码加1称为补码

​ 11111111 11111111 11111111 11110001+1=11111111 11111111 11111111 11110010

-14(11111111 11111111 11111111 11110010)

四,JAVA内置的进制转换

十进制转换成十六进制 Integer.toHexString(int i)
十进制转成八进制 Integer.toOctalString(int i)
十进制转成二进制 Integer.toBinaryString(int i)
十六进制转成十进制 Integer.valueOf("FFFF",16).toString()
八进制转成十进制 Integer.vakueOf("376",8).toString()
二进制转成十进制 Integer.vakueOf("1011",2).toString()

五,java中的数据类型

二进制 在跨平台中用得比较多 如:文件读写,数据通信

java 语言中基本数据类型
int 类型

byte 1个字节 8位 short 2个字节 16位

int 4个字节 32位 11(1011)<<=44 11(0000 0000 0000 0000 0000 0000 0000 1011)32bit

long 8个字节 64位

浮点型数据类型

单精度(32bit 4个字节 float)、双精度(64bit doble)

bolean类型的取值类型 true 、false

char 数据类型 Unicode 字符 16bit

对应得类类型

​ Integer、Float、Boolean、Character、Double、Short、Byte、Long

数据类型 转化 字节

​ 例 8143(00000000 00000000 00011111 11001111)

​ => byte[] b=[-49,31,0,0];

​ 第一个(低端) 字节 8143>>0*8 &oxff=(11001111)=207 (或者有符号 -49);

​ 第二个(低端) 字节 8143>>1*8 &oxff=(00011111)=31 ;

​ 第三个(低端) 字节 8143>>2*8 &oxff=(00000000)=0 ;

​ 第四个(低端) 字节 8143>>3*8 &oxff=(11001111)=0 ;

大小端

​ 小端法(little-Endian)

​ 低位字节排放在内存的 地址端 即该地址值的起始地址,高位字节排放在内存的高地址端

​ 大端法(Big-Endian)

​ 高位字节排放在内存的 地址端 即该地址值的起始地址,低位字节排放在内存的高地址端

例 :32bit宽的数 0x12 34 56 78

在 little-Endian 模式的CPU内存中的存放方式

内存地址 0X4000 0X4001 0X4002 0X4003
存放内容 0X78 0X56 0X34 0X12

参考文章

位运算的威力

http://blog.scdn.net/iukey/article/details/7195265

大小端详解

http://blog.scdn.net/zhaoshuzhaoshu/article/details/37600857

猜你喜欢

转载自blog.csdn.net/andco/article/details/77466703