继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

java重学 温故知新 第二天

尘瀚
关注TA
已关注
手记 7
粉丝 20
获赞 175

1.进制
a)分类
二进制 0b(0B)开头 0,1
八进制 0开头 0,1,2,3,4,5,6,7
十进制 默认 0,1,2,3,4,5,6,7,8,9,
十六进制 0x开头 0,1,2,3,4,5,6,7,8,9,a,b,c,e,f(大小写均可)
b)转换 ->十进制
系数 每一位上的数据
基数 X进制
权 从0开始编号,对应位上的编号,即为该位上的权
结果 系数乘基数的权次幂的和
c)转换 十进制-> 除积倒取余
图片描述
先转二进制 再拼其他进制
d)原码,反码,补码
计算机是二进制,设定第一位是符号位,0为正,1为负,但有一个问题
+7 0 0000 111 -7 1 0000 111
+7 +(-7) = 1 0001 110 不为0 这样是不符合常理的
对于正负数的计算行不通,为了正负数不能相加这个问题引入原码,反码,补码三个概念
1)正数的原码,反码,补码都是其本身 +7 0 0000 111(原,反,补)
2)负数的反码:符号位不变,其他各位按位取反 -7 1 1111 000(反码)
3)负数的补码:反码+1 -7 1 1111 001(补码)
4)计算机里面的计算是通过补码进行计算
0 0000 111(+7补码)+1 1111 001(-7补码)=1 0 0000 000
截取后八位 0 0000 000为0
2.数据类型
强类型,对每一种数据都明确的定义具体数据类型,在内存中分配不同的大小空间
基本数据类型(四类八种)
整数型:负数的要多1 因为 0 0000 000 对应 1 1111 111
byte 一个字节(8位) -128~127
short 两个字节(16位) -2^15~2^15-1 -32768-32767
(默认)int 四个字节(32位) -2^31~2^31-1 -21亿到+21亿(
long(L) 八个字节(64位) -2^63~2^63-1 -92亿亿到+92亿亿
浮点型:
float(F) 四个字节(32位) 符号位1位 指数位8位 尾数位23位
-2^128~2^128 float的范围比double大
(默认)double(D) 八个字节(64位) 符号位1位 指数位11位 尾数位52位
-2^1024~2^1024
字符型:
char 两个字节 0~65535
布尔型:
理论上一个字节,但实际上没有明确指出其大小
注意:1与l的区别

3.变量:
1)同一个区域不能使用同一个变量
2)局部变量在使用之前要给初值
局部变量是方法内定义的变量,全局变量是类里面定义的变量,会默认给初始值

4.数据转换
1)隐式转换 byte+int = int 小+大=大
2)强制转换(byte)(byte+int) = byte (小)(小+大)= 小 截取低位有精度丢失的风险
3)混合运算 byte,short,char->int->long->float->double
4)char+int = int int可强转为char
5)任何类型+String = String +到String的时候才转为String
注意:
对于变量,byte与byte(或short,char)在运算的时候会自动提升为int类型,int类型赋值给
byte类型需要强转
对于常量,jvm有常量优化机制。当两个常量的和在byte的范围内时,两个int常量之和可以给
byte类型变量
虽然float只有四个字节,long有八个字节,但是float要比long大

5.运算
算数:
取余% : 取余结果的符号只与左边有关
++,--: a++先用再加 ++a先加再用
type b = 6 b++ <=> b = (type)(b +1)
逻辑:目标是boolean
^ : 两边相同为false 两边不同位true
&&与&结果一样 短路与 左边为false,右边不执行
|| 与|结果一样 短路或 左边为true, 右边不执行
位运算:目标是数
& | ^ ~ 按位与,或,异或,非
<< 符号位不变 最低位补0 结果乘以2的几次幂

符号位不变 最高位为1,补1,最高位为0,补0.结果除以2的几次幂

不论符号位 左边补0
注意:一个数对另一个数位异或两次,这个数不变 0^1=1^1=0

6.选择结构
1)if语句如果后面没有大括号,只对其下的一条语句有效。int a = 3这条语句实际上是由两条语
句组成的:int a ; a=3; 如果if语句后面没有括号,紧接着是 int a = 3 这条语句就会报错
2)三目运算符达到的效果 ,用if语句都能实现
3)switch中的表达式可以是:byte,short,char,int,枚举(1.5),String(1.7)
switch 可能出现case穿透的情况。switch结束,要么是break,要么是右大括号,注意
default放在最上面的情况
switch适合在判断固定值的场景,if是适合判断区间的场景

题目:
交换两个数,不定义第三方
1)x = x+y y =x-y x = x-y
2)x = x^y y=x^y x = x^y

发现位移问题:
如果为负数,向左移位应当一直为负,实际情况不是这样
图片描述
图片描述
图片描述
正数:
图片描述
结论:
1)java中运算是以补码的形式
2)向左位移的时候,移到边界是0,末尾不会补00,移到边界的是1才会在末尾补0。
3)当数据向左位移32位后,不会截取低32位,而是截除低32位
4)向左位移32位以内至少有一次为正数的机会,这个不可控,所以向左位移要少用!
5)如果给JVM的是一个少于32位的二进制串,会自动在前面补0,即是一个正数

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP

热门评论

大佬  进制表示一脸懵逼   

我刚开始学习java,前辈你好厉害

查看全部评论