该用户从未签到
|
1. java 变量
3 E/ f! l: c7 _5 i( F* B. S 1) 变量就是自然语言中的代词$ p! F9 p$ w. s
Person he; int age = 15; , a3 r% j9 z; @$ j1 \+ |; L
//age= 00000000 00000000 00000000 00001111
/ X' q* s; j3 Y$ [, L z* C3 n System.out.println(age);//155 Q* a5 s2 d, Z$ W8 f- _
2) Java 中的变量, Java是强类型语言, T% n4 i% \- z3 P# s {% p, P
A 变量必须声明,并且初始化以后使用 int i=0;
$ d# C# L5 K- @ B 变量必须有明确的类型
2 o4 u2 ^/ P7 p1 z6 u1 [+ i6 ~ C 变量不能重复定义
) e* u4 y4 d" u8 F# B0 w- Z, Y/ _ 3) 变量的作用域
. p. l" ~2 \% ]0 f- j" s a 在声明的地方开始,到块结束为止
, p# i Q! R. y b 离开变量的作用域结束,变量将回收。8 p1 i% A' X( @8 w+ `& ?
. B/ f+ e+ r# V5 M# E7 W
2. 进制转换基础
0 o# Y6 Z1 d. _' m; \) I/ ?+ D 1) 十进制
% X8 Z+ d% t, Y" l7 t- E 逢10进1
9 ?8 W/ Q _+ |, a2 T. D$ ~ 基数: 10
7 j7 c4 z& w) T4 ]) A* q& Z5 d 权: 10^n, 10000 1000 100 10 1
; l0 B: y7 {0 k. u) Y 23678(10) = 2*10000+3*1000+6*100+7*10+8*1
" b$ G) N+ Z0 {+ i) Y' v" `0 u- L) s = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
& W5 `" t" Z$ A* Q4 z& u = 23679
: h: \! `: _6 z/ R+ r& ?% ]% S* m+ h3 {! v! N9 U1 {
2) 二进制/ l3 e* O+ L# z9 a) M& c
逢2进1
' V' `; ?( l5 } 基数: 2
! a1 P" ^" ?% V+ h2 {" E4 f 权: 2^n, 128 64 32 16 8 4 2 1
6 y( [' C/ M" S 01000001(2) = 1*64 + 1*16 I8 b/ D, ?5 ^# ], m3 R2 P( \
= 65(10). F/ M1 a1 p1 r W0 J$ N
3) 补码基础
; \' _/ ^) d6 }2 q+ I* v3 p. f -128 10000000 11111111 11111111 11111111 10000000
7 v3 M( E/ c2 i: U0 {, x10 2进制 ... ...
3 Y/ A2 W4 V2 }2 a9 F# a0 _ 8421 11110111 11111111 11111111 11111111 111101110 o3 R; }. r. ]' T/ O
-8 1000 11111000 11111111 11111111 11111111 11111000 / F$ C0 w$ t3 v. g
-7 1001 11111001 11111111 11111111 11111111 11111001+ k7 W8 q& m. u* z4 \
-6 1010 11111010 11111111 11111111 11111111 11111010
. b: _9 Z. ~5 a& Q; M4 g-5 1011 11111011 11111111 11111111 11111111 11111011! ^2 q" P }, I" d2 V* q$ r
-4 1100 11111100 11111111 11111111 11111111 11111100
' S4 h5 S1 ~' l- q-3 1101 11111101 11111111 11111111 11111111 11111101
7 u! S1 K( V2 \. l9 P-2 1110 11111110 11111111 11111111 11111111 11111110
" B- ^1 V, V$ ^-1 1111 11111111 11111111 11111111 11111111 11111111
$ ?3 b3 M8 T& Q& _ N: K9 x 0 0000 00000000 00000000 00000000 00000000 00000000# g1 A7 C3 d4 x3 c) U! b4 J
1 0001 00000001 00000000 00000000 00000000 00000001! M( h1 a7 B" A9 T6 d
2 0010 00000010 00000000 00000000 00000000 00000010
% S" Y( M$ r e" h1 P3 u 3 0011 00000011 00000000 00000000 00000000 00000011
0 X$ X2 z1 v4 E2 t$ b5 O& x8 B3 L 4 0100 00000100 00000000 00000000 00000000 00000100
7 F! V6 l/ O/ y 5 0101 00000101 00000000 00000000 00000000 00000101
) Z+ R$ @1 x& D/ X9 D 6 0110 00000110 00000000 00000000 00000000 00000110
, L4 |$ Y6 M9 [6 ^) s 7 0111 00000111 00000000 00000000 00000000 00000111 : k" F' u' z1 u- u6 W
00001000 00000000 00000000 00000000 000010006 U7 i& p' z5 e/ L6 f2 U: M
.... ...
5 i; h' {4 d2 q/ U 127 01111111 00000000 00000000 00000000 011111116 }# s$ w5 G6 L4 n4 l0 C3 u2 _
补码运算:
# G: b$ V8 L1 V6 p -1 1111' R2 `: [; Z( l8 `4 P7 i
-1 11116 r; E' ~. f; R" I2 G' ^
* * R W) m1 q1 N; \/ f5 V8 ?
---------- 6 b5 ]& `. G1 S- Q
1111; g# s% m' ?* _
11114 x) I' O% z6 A
1111
. Q! ?" B7 Q" Y% p& S# G 1111
/ _& f0 |- [) c7 Z6 E5 @9 A, ~ 1010101
: S$ n/ Z" f/ R) U8 r* ] -----------
7 c; o! S: s+ L* a* ? 0001( u8 Q) h: J& B* z- T# ~- g
/ E' K! u& \. C C- } 4) A Java 内部只有二进制补码
6 w" F2 l5 o, D$ ~& P0 m0 O6 a B Java 内部采用补码运算, 自动发送上溢出和下溢出. y) n1 @4 T! k, D! v* ^
C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出. y! B. V% s* @' F7 n
D 补码的负数 最高位是 1, 也称作符号位
7 f1 z+ ~! g) `0 M! q+ a8 l& w 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据3 E2 W8 P. _$ P; W- o2 s, p
16进制 u! a6 K* m5 X8 G
逢16进1
/ m0 p- J: b9 O8 P# V6 C" R7 a2 B 基数: 16
* e0 R0 b& e. w1 W9 t: c$ Q$ N 权: 16^n, 256 16 1 ' L+ I6 Z; E# Z( }0 J" [# n
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f$ _, S; @; S4 }, I8 r' @8 w
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15: s) Z4 l: f/ j
9 s x/ W( u1 ~
41(16) = 4*16 + 1*1
2 M4 `/ G: Q0 W7 d% } = 65(10)
0 b* }. P5 Z9 K/ ~ = 0100 0001(2)
+ H# n0 P( P. h 8421 8421/ P7 [# a/ Z$ H T/ q: K( @
4 1 (16), p! R P [ v9 z# h
9 I4 }: l: q1 C4 h. G
128 64 32 16 8 4 2 1
$ G( h9 r* J- g% R 0 1 0 0 0 0 0 1
( M& C) p( W- A" k% K8 T# n 练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
1 E$ x1 \& X( F% O2 a. X: u 192(10) = 1100 0000 (2)
" M! |) Z/ I* l( y# f, t c 0 (16)* h3 T( h! u2 F
-8(10) = fffffff8(16)1 y/ E2 d% v# c3 P
进制总结:
/ h* q R) f8 W( ] 计算机内存只有 二进制补码
9 l& ?+ C- }# z9 A& p* Z5 O 默认输出, 按照人习惯输出10机制结果
& |) f/ v* s3 e1 \ 16进制是, 二进制的简写, 16进制本质就是2进制
0 Z% F* `; H$ M' X3 |( f7 ]; y; j 16进制存在的价值: 方便书写2进制!; a5 R3 m" \( f& R, \2 r l5 E
! ~+ M- M) @2 }0 c# C4 w2 f3. Java 数据类型: 分为引用类型和基本数据类型3 i( _, v% F1 L2 y' R
1) 基本数据类型: 8种
3 C B: y. [/ U+ j- u/ ~ byte, short, int, long
) Z' R# | B* G( o. y float, double
7 ]2 ~6 m7 m3 |! n8 L char. L3 L0 [$ z/ v
boolean
9 z9 H; K; j6 O- r, n5 A 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
; j8 C2 U* ^4 z6 Y7 a Y byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
/ Q5 i/ Q0 q Y& M short 16位有符号数 0x7fff 32767 0x8000 -32768
6 M- @- S7 O+ j int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G 5 Y2 ~$ l; \# S/ o8 _
long 64位 ....) b+ L& x2 |( y$ k2 r) b
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
. k1 z0 h: A! @ 小类型直接赋值.
6 x0 E4 H+ K1 w1 e/ ]! ~ 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算6 M. l# u& m9 @" P5 y- B9 t- x5 B
java 底层byte,short 按照32位计算
/ I. E" _* B$ `. i, a! P; ^, P4 ^* E2 X( i0 e
long 类型的字面量使用"L","l" 后缀
" e" o: p+ f- ]1 y# i7 S- k2 f; n6 O+ V; J0 ^
3) 浮点数, 小数 (不必掌握 浮点数的存储方式)" l: O" _0 Y) F# K
浮点数原理: 10进制浮点数(科学计数法)原理0 [5 y4 g/ r/ H' d* {
2356189. = 2.356189 * 10^6
- b& i3 \/ c4 l+ z4 G 概念: 尾数: 2.356189
# y( k' m+ _% v* _8 T 指数: 6
9 J" K: a$ _1 w 基数: 10
- H( E( j# W% g. A& \ pi = 3.14; y* @; m5 \0 y9 N7 F
3.1415926535897932384626433
# n2 _' q! W, s0 u0 A) k0 R. p- w/ F/ m
& F% Z3 `6 E# x, I9 `# K7 R 二进制浮点数:; \) ~9 b/ `$ N3 B6 X/ p6 L1 F
101001010101. = 1.01001010101 * 2^1011& L- I3 e8 U4 i: o* u& M
概念: 尾数: 1.010010101011 T$ M5 w* Z% _7 |2 ~: u' ^
指数: 10115 h* u+ h* o$ U& N2 i) Y& @3 U
基数: 2
3 u4 |5 l# r9 s2 l" Z
; N4 t% N n8 U1 q9 t. z, f float: 32位 其中: 1位符号位, 8位指数, 23位尾数
& s J0 }4 K8 J9 Z& I4 w/ e) y7 d7 O: c f H
精度: 23 位7 r* q- ?! t1 _, X: ]
int max = 01111111 11111111 11111111 11111111
, z$ \* D5 N3 A# B" \ float f = 1.111111 11111111 11111111 1 * 2^00011110
4 O- e& @$ E4 i
: l. R# q' W. }2 g! S V double: 64位 其中: 1位符号位, 11位指数, 52位尾数, G' n2 U) Q1 w. g5 B6 |- ?) e2 S
$ Q* d& G2 N: n5 m( J/ S 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
% t5 w' F( ^; F- ?' c
`4 a; |* C8 v 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数) V u8 k2 Y w0 ]2 x
数值是一个字符的unicode编码值. # \4 [$ Z6 T8 U) H% @
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩" _: t% L9 r, P( ?
阿拉伯, 希伯来, ..... 8万+ 字符
7 D$ I2 \: S6 |/ a9 v$ G 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
7 j5 F3 T' `3 n7 X- ]) c ASCII: 0~1289 a% {" W! v, O. Z$ a/ @+ _+ u( c
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示: g' d- O; L& s
unicode只能够最常用的部分
" K" U: Q3 O. q! e
; Q6 u. p$ i @% Z. p* v+ E *最小值:0, 最大值:65535 = 2^16-15 U% A4 N2 F% I/ |; P% w0 P& `9 H
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4; Z, Z. K2 |/ F' E9 V2 Y# X
字面量也是整数常量! 52 48 3 S( k5 }: |. n
特殊字符采用转义字符表示:
9 e; e0 |# J+ B L 如: '\n' '\t' '\\' '\b' '\r' ! `" k. @- g! c& j: r
'\'' '\"' '\u4e2d' : P7 Z' [" b2 z$ E. Q
! ]6 u' T' \! c6 C/ U char c = '\\';5 V3 S. x; n. T, a2 j1 o; C
) q' w1 q5 y& ~( j9 y; l8 J( p
'X' - 'A' = N
' _) F* C- c, \, n 'x' - 'a' = N
" ^5 ]0 u$ ]: u. {- t6 | X = 'c' - 'a' + 'A'
4 A( ^3 h/ f" K; X5 C& h+ k$ I* e4 M
5) boolean 布尔类型 表达: 真(true)/假(false)
" S( B% c# a) C" e9 X6 A& f# @$ F 建议使用长变量名定义变量6 Q9 O0 f; Q# @9 z/ q
boolean started = true;
' {2 B+ J& O6 \ boolean isMan = true;$ Q j( D5 v% h1 u
isMan = false;
4 t' ]( `: S7 q8 Z& w$ X boolean used = true;//二手的: R8 @* X" {, [$ ^7 w/ q9 L2 ?
if(used){
$ G1 S0 l- e i$ }9 A System.out.println("打八折");
- a2 L* W( s# P/ |0 Y! E }* ]" K) A$ E& s, @# p9 T
不建议 定义没有意义的变量: Q: A% X5 T }6 U1 c4 ~4 e" E0 H
boolean u = true;//u = you
4 t, ]4 t8 f* g/ K* y ?$ d boolean flag = false;4 K" [/ B! C! Z* }. x) e
2 E5 H( ]! ?7 v" y" g
if(flag){
5 h/ q1 z! R# A4 l$ y( } System.out.println("打八折"); & Z1 \4 m; z1 T2 H2 R p9 o
} & f4 |$ d* a" @/ o2 `) X% D
7 M, L: j% O) n, b
4. 数据类型转换 ) L5 B5 j; ]: ^& ]4 Y! ~5 K% \
char ->
0 k& i2 w* i5 r. ~6 ^7 f5 i- ^ byte -> short -> int -> long -> float -> double
; Q: H7 l3 u- H2 p7 S/ K
K, m# u7 {$ k" L 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成. H* c1 P! ]. j% F- ^, [
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变- o% h% }6 b/ B8 g9 x2 b
注意, 整数到浮点数转换会损失精确度4 ]3 ~& y9 x1 h. P* |) o3 R. t9 x
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
2 X7 m. G$ G+ U- g8 |9 J- W! K* ~3 [2 ~ I H1 q# k9 D
int i = -1;$ v2 x4 C3 ]$ ^$ i4 C. t
long l = i;0 C6 c) b+ V6 W5 g1 X' P
% I3 m$ M" o& h3 m% l- S 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行2 p( O/ O! V5 s
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
6 w* C* q7 N" A- W- G; w! D int i = 128+256;// 00000000 00000000 00000001 10000000
2 @% k% D0 d, t/ p$ w byte b = (byte)i;//-1284 J$ ^( [8 t8 ], {% [" R I8 e
' W0 O. ^9 E6 g. U/ Q! k$ R8 a
long l=0xf80000000L;
3 m7 }5 Q: Y* E2 U* M0 t" Y int c = (int)l;//负数: a) J" W7 h/ B8 E3 Q) Y- N8 k# D
8 D! `, v# R4 S1 t8 A! m1 V l = 8;1 o* c0 {1 u; g* h5 D2 i
int d = (int)l;6 c2 P0 C- R1 ?' }
$ G% O. i1 A+ d8 i+ q
float pi = (float)3.1415926535;//损失精度+ u& v- r: X3 _; P! _/ O& D
! P$ }0 {6 @/ }3 D! C
char c = '0';+ `0 D' F/ l, Q4 v, I
char x = (char)(c+2);
, D* U0 z9 R/ W8 |/ F/ ~/ }
! B6 F' B4 m! Z$ y" x |
|