1. 基本概念
计算机处理信息的最小单位是位,就相当于二进制中的一位。位的英文bit是二进制数位(binary digit)的缩写。
8位二进制数被称为一个字节
字节是最基本的信息计量单位。
位是最小单位,字节是基本单位。
十进制数是以10为基数的计数方法,二进制数则是以2为基数的计数方法,八进制就是8,十六进制就是16。
2. 运算
移位运算指的是将二进制数值的各数位进行左右移位(shift=移位)的运算。
移位有左移(向高位方向)和右移(向低位方向)两种。
示例:左移两位运算
补数:补数求解的变换方法就是“取反+ 1”。
为了获得补数,我们需要将二进制数的各数位的数值全部取反,然后再将结果加1。
算术运算是指加减乘除四则运算。
逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括逻辑非(NOT运算)、逻辑与(AND运算)、逻辑或(OR运算)和逻辑异或(XOR运算)四种。
- 逻辑非指的是0变成1、1变成0的取反操作。
- 逻辑与指的是“两个都是1”时,运算结果为1,其他情况下运算结果都为0的运算。
- 逻辑或指的是“至少有一方是1”时,运算结果为1,其他情况下运算结果都是0的运算。
- 逻辑异或指的是排斥相同数值的运算。
真值表
示例:
3. 逻辑右移和算术右移
将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1)。这就称为算术右移。
符号扩充就是指在保持值不变的前提下将其转换成16位和32位的二进制数。
4. 浮点数
浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。
双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数
双精度浮点数能够表示的正数范围是4.94065645841247×10-324~1.79769313486232×10308,负数范围是-1.79769313486232×10308~-4.94065645841247×10-324。
单精度浮点数能够表示的正数范围是1.401298×10-45~3.402823×1038,负数范围是-3.402823×1038~-1.401298×10-45。
浮点数内部构造(IEEE标注)
双精度浮点数能够表示的数值范围要大于单精度浮点数。
符号部分 是指使用一个数据位来表示数值的符号。该数据位是1时表示负,为0时则表示“正或者0”。
尾数部分 用的是“将小数点前面的值固定为1的正则表达式”。
指数部分 用的则是“EXCESS系统表现”。
EXCESS系统表现
通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示。
当指数部分是8位单精度浮点数时,最大值11111111=255的1/2,即01111111=127(小数部分舍弃)表示的是0,指数部分是11位双精度浮点数时,11111111111=2047的1/2,即01111111111=1023(小数部分舍弃)表示的是0。
计算机出错
计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有因“位溢出”而造成计算错误的情况)。
解决:
回避策略,即无视这些错误。
把小数转换成整数来计算。
5. 二进制数和十六进制数
通过使用十六进制数,二进制数的位数能够缩短至原来的1/4。
6. 数据类型
1字节长度的char
2字节长度的short
4字节长度的long
8字节(=64位)长度的double
7. 指针
指针也是一种变量,它所表示的不是数据的值,而是存储着数据的内存的地址。通过使用指针,就可以对任意指定地址的数据进行读写。
指针的数据类型表示一次可以读写的长度
8. ByteBuffer
三种实现方式:
第一种是堆内存储数据的HeapByteBuffer,将数据保存在JVM堆内存中;
第二种是堆外存储数据的DirectByteBuffer,采用堆外内存来存放数据的,因此在访问性能提升的同时带来了复杂的动态内存管理问题。;
第三种是文件映射(数据存储到文件中)的MappedByteBuffer。