java编程的逻辑读书笔记——第二章

1.整数的二进制表示

1)原码:可以直接通过计算得出的最直观的形式。
2)补码:原码取反加1。对负数的补码表示做补码运算就可以得到器对应正数的源码。
3)负数的表示就是对应的正数的补码。
4)计算机其实只能做加法运算,用负数的补码形式进行运算。

2.十六进制

1)将4个二进制位简化位一个0~15的数,10~15用字符A~F表示,这种方法称为十六进制。
2)十六进制表示,在前面加0x
3)二进制的常量表示,在前面加0b或者0B
4)查看整数的二进制方法和十六进制方法
	Integer.toBinaryString(a);
	Integer.toHexString(a);		//返回一个字符串

3.位运算

1)左移:<<  右边的低位补0,高位就舍弃了,相当于十进制乘以2
2)无符号右移:>>>  向右移动,右边的舍弃,左边补0
3)有符号右移:>>   向右移动,右边的舍弃,左边的取决于高位,高位为什么就补什么

4.逻辑运算(本身意思)

1)&
2)|
3)~:按位取反
4)^

5.小数(浮点数)的二进制表示

1)m*(2^e)
  m成为位数,e成为指数
2)一种是32位,对应的是float,1位表示符号为,23位表示尾数,8位表示指数
  一种是64位,对应的是double,1位表示符号为,52位表示位数,11位表示指数
3)如何查看浮点数的具体二进制形式
  Integer.toBinaryString(Float.floatToIntBits(value))
  Long.toBinaryString(Double.doubleToLongBits(value))

6.字符的编码

1)编码分为两大类,Unicode编码,和非Unicode编码:ASCII,ISO 8895-1,Windows-1252,GB2312,GBK,GB18030
2)ASCII包含128个字符,刚好对应计算机最小存储单位byte
3)GB2312,GBK用两个字节表示汉字,GB18030用两个或者四个字节表示汉字
4)Unicode包含UTF-32,UTF-16,UTF-8,就是把Unicode编号对应到二进制形式,其中32使用4个字节,16大部分使用两个字节,少部分是4个字节,8使用1~4个字节,并且至于8兼容ASCII编码。
5)编码转换实际上转换的是编码的二进制内容,并没有改变字符看上去的样子。

7.乱码

1)乱码常见的原因:第一种是简单的解析错误。第二种是,在错误解析的基础上进行了编码转换。
2)解析错误二进制形式不会发生改变,只需要换一种正确的方式进行查看就能恢复。
3)解析错误后,二进制不变,数据形式发生改变,再进行编码转换,数据形式不会发生改变,但二进制已经改变了。

8.乱码恢复

1)使用具有编码转换的软件进行编码转换,知道恢复正确的字符
2)使用java
	将多种编码格式保存在数组中,利用双层for循环进行解析。
	核心代码:
		Stirng str = "乱码字符串";
		String str1 = new String(str.getBytes("windows-1252"), "GBK18030");//使用特定编码将字节数组转换为字符串
		System.out.println(str1);
3)并不是所有的乱码都可以恢复。

9.char的真正含义

1)char本质上是一个固定占用两个字节的无符号整数,这个正整数对应于Unicode编号,用于表示那个Unicode编号对应的字   符。
2)char的比较就是Unicode对应的二进制编号的比较。

猜你喜欢

转载自blog.csdn.net/weixin_42424720/article/details/83273787