进制
二进制 0. 1 满2进1 以0b或0B开头
一个字节 8 位
14
符号位 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
0为+/1为- | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
首位符号位 0表示正数 1* 23+1* 22+1* 21+0* 20 =8+4+2=14
正数三码一样 源码,反码,补码
将14的二进制0000 1110最高位改为1–>得到1000 1110此为-14源码
首位符号位 1表示负数
-14 此为-14的源码(首位是符号位)
1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---|
-14反码为–除符号位外,其余各个位取反: 如下
1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
---|
-14补码为 : 反码+1: 如下
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
---|
计算机底层,以补码方式存数据,(就是我们正常学的进制形式,通常不明确指出,就默认是补码)正负都是补码
如-14,存储为补码1111 0010
byte类型1字节8位 -128~~127 128超出byte范围
int 4字节32位 128表示为0000 0000 0000 0000 0000 0000 1000 0000
当int128强转为byte,只取最后8位 int 128最后8位是1000 0000
转为byte 1000 0000 第一位 1变为符号位
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|
而1000 0000是对应的是-128
1000 0001是-127 -127-1 = -128 1000 0001 -1 -->1000 0000
十进制 0-9 满10进1
转2进制
13/2 = 6…1
6/2 = 3…0
3/2 = 1…1
1/2 = 0…1
0 / 2 = 0…0
倒着写 1101
八进制 0-7 满8进1, 以数字0开头
十六进制 0-9和A-F,满16进1 , 以0x或0X开头表示,此处A-F不区分大小写10-A 11-B…15-F
如 0x21AF+1 = 0X21B0
互相之间的转化,通过二进制搭桥
八进制–8 = 23 将二进制数3个分一组计算
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
---|
0开头 | ----------------------------------- | 011=3 | 101=5 | 001=1 |
---|
结果0351
二进制—>十六进制
16 = 24 四个数分一组计算
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
---|
0x开头 | — | - ---- - | ------ | ----- - | 1110=E | 1001=9 |
---|
结果为0XE9
运算符
算术运算符:+, -,*,/, %,++, --(自增自减,++a —>先自增,在赋值 a++ ---->先赋值在自增)
赋值运算符=
关系运算符:>,<,>=,<=,==,!= instanceof
逻辑运算符:&&,||,!
位运算符:&, |,^,~, >>, <<, >>>(了解! ! ! )
条件运算符 ? :
扩展赋值运算符: +=, - =, *=, /=
自增 自减
a++ —>后加加 先计算,最后自增
++a —>前加加 先自增,再计算
–a同理
a = 2 :b = ++a // a = 3 , b = 3
a = 2 :b = a++; // a = 3 , b = 2
a = 2 :b = --a; //a = 1 , b = 1
a = 2 :b = a--: //a = 1 , b = 2
// 注意,自增自减不会改变变量数据类型
short s=10;
s++: //s++ = 10 ,结果为short类型 若为s1 = s+1,则为int
// %取模运算(取余数) 取模结果为零,表示能除尽
int m = 12:
int n = 5:
int y = m % n://y=2 -12$5=-2 /12%5=12/-12%-5=-2 12%5=2
//取模运算的结果,正负号跟被模数的符号一致
幂运算 (Math类)
3² Math.pow(3,2)
逻辑运算符(只能操作boolean类型变量)
短路与 A && B | 短路或 A || B | 逻辑非 ! |
---|---|---|
和(and) | 或(or) | 取反 真取假,假取真 |
只要有一个是false,结果为false | 只要有一个是true,结果为true | a^b |
优点: A(若为false)决定结果,将跳出,不计算B ,减少运算 | 优点: A(若为true)决定结果,将跳出,不计算B,减少运算 | 亦或(a和b相反(一真一假)为真) |
位运算(运算速度最快)
A | 0 0 1 1 | 1 1 0 0 | |
---|---|---|---|
B | 0 0 0 0 | 1 1 0 1 | |
A & B | 0 0 0 0 | 1 1 0 0 | 与 |
A | B | 0 0 1 1 | 1 1 0 1 | 或 |
A ^ B | 0 0 1 1 | 0 0 0 1 | 异或 |
~B | 1 1 1 1 | 0 0 1 0 | 取反 |
左移 << —> *2
右移>> —> /2
拓展运算符
+= a+=b --> 结果同 a=a+b
-= a-=b --> 结果同 a=a-b
short s1 = 10;
s1 += 2;//自身加,不会改变数据类型
三元运算符
x ? y : z --> x 成立,输出 y ,否则 输出 z
注意
加号
加号 + 运算过程中,遇到字符串 , 字符串之前的数字 仍为加法运算,从 字符串 之后 的 加号 + 变为字符串连接符,
优先级
优先用小括号 () 来组织 ,不易出错.清晰明了
逻辑非 > 与 > 或 ! > & > |
a || b && c ==> a || (b && c)