疯狂java讲义_day_01——第三章:基本数据类型、补码、位运算符..
1. java包含的8中基本数据类型
2. 原码、反码、补码
-
计算机以补码的形式保存所有整数。
-
①正数的补码与原码完全相同; ②反码是对原码按位取反,符号位不变; ③负数的补码是其反码加1
-
若有int a = - 5 ; 然后二进制表示为1000…0101,这其实是它的原码,计算机实际存储时会在内部把它先转换成补码再进行存储。
-
位运算时,都是通过补码参与操作的,正数的原码和补码相同,所以不用思考转换问题,负数的话比如-5,首先需要写出它的原码形式即1000…0101,然后转换成反码-补码,通过补码进行位运算,再转回原码,由原码得出最后的值。
3. 位运算符
& 与运算:两位都为1,结果为1
| 或运算:只要有1,结果为1
~ 非运算:全部取反
^ 异或运算:相同为0,不同为1
<< :左移运算符; >> 右移运算符; >>> :无符号右移运算符
计算 ~-5 的流程(结果:4)
①写出-5的二进制表示(原码):1000…0101
②取反得其反码(符号位不变):1111…1010
③反码加1得其补码:1111…1011
④进行非运算~,全部取反(包括符号位):0000…0100
⑤由于第一位为0,所以为正数,正数的补码和原码相同,所以此时它的原码就是0000…0100,对应结果为4。所以~-5 为4。
计算 -5 << 2 的流程(结果:-20)
左移运算符,左移后右边空出来的位以0填充。
①写出-5的二进制表示(原码):1000…0101
②取反得其反码(符号位不变):1111…1010
③反码加1得其补码:1111…1011
④根据下面图片可知,左移后得到的补码是:1111…101100
⑤第一位为1,负数,不能直接得出原码。首先补码 -1 转为反码:1111…101011
⑥反码取反得出原码(符号位不变):1000…010100。结果为-20。
计算 -5 >> 2 的流程(结果:-2)
右移运算符 >>,右移后左边空出来的位以原来的符号位填充。
计算 -5 >>> 2 的流程(结果:1073741822)
无符号右移运算符 >>,右移后左边空出来的位总是以0填充。
4. 其他小知识点
- Java的标识符规则:标识符用于给程序中的变量、类、方法命名。java语言的标识符可以由字母、数字、下划线和美元符$组成,其中数字不能打头。
- char a = ‘风’;char b = ‘a’; char类型只能有一个字符,单括号括起来。(char a = ‘风景’,错误;char b = ‘aa’,错误)
- double类型代表双精度浮点数,float类型代表单精度浮点数。Java语言的浮点数默认是double类型。如果float a = 5.12,会发现报错,因为这里的5.12默认的是double类型,需要改成:float a = 5.12f
- 自动类型转换图:箭头左边可以自动类型转换为箭头右边的数值类型。
- 比较运算符:>= , <= ,!= ,比较在左,等号在右
- 三目运算符:(a) ? if-a-true : if-a-false;
例如:String str = 5 > 3 ? “5大于3” : “5小于3” ; - 循环语句中,continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环;break则是完全终止循环本身;return直接结束整个方法,不管这个return处于多少层循环中。