该用户从未签到
|
1. java 变量+ h: {* ^; c) @% L
1) 变量就是自然语言中的代词
) ? x) m, p3 w# {( ~1 P( j1 z Person he; int age = 15; + a! Z# p- ~4 L" D# p5 g
//age= 00000000 00000000 00000000 00001111
6 p8 C, c" }+ x8 b2 E System.out.println(age);//157 n2 T: b$ G& l8 d
2) Java 中的变量, Java是强类型语言,
$ m2 D. ]/ @, @- r% l A 变量必须声明,并且初始化以后使用 int i=0;
2 {. {0 T# @8 B. R. O, p B 变量必须有明确的类型3 M( _8 F5 f* O1 Y' _* G; E
C 变量不能重复定义
" H& m4 j5 l% o0 E( k, E 3) 变量的作用域1 T$ d" |1 v/ l! e, G) i
a 在声明的地方开始,到块结束为止, Z$ a& }! D, c: B {
b 离开变量的作用域结束,变量将回收。" S( ]2 p) C( N, a
, G" G9 q. Z" L* X6 y/ X
2. 进制转换基础1 g, o6 Y" P3 _" p! K+ ?# o
1) 十进制 + b# K k4 i1 X' J* H
逢10进1
, ?) K, g; ]" A( Y) f2 w3 U 基数: 10
8 M+ y. W/ Y' d$ q 权: 10^n, 10000 1000 100 10 1* P5 w7 `5 Q5 R o7 H+ Z
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 1 v2 A @2 L& v" I
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0 , y) A8 w9 ?- h u1 i
= 236799 `( \, W Y# Z9 h& {; }
V- C" b5 r; r3 L 2) 二进制
' d3 @% ] R3 c+ r: Y- A 逢2进1) i/ K/ _* ~/ | G- u
基数: 2
6 {! r% N' J* R. o7 C% l9 m4 m) d7 |" |8 k 权: 2^n, 128 64 32 16 8 4 2 1 * l( l9 h7 b7 T' [4 E& ~
01000001(2) = 1*64 + 1*1
' `0 i3 K2 ?7 ^1 G: v+ y = 65(10)( {5 T* d6 `/ K+ u- a: k
3) 补码基础
( W( Q6 z# }! h -128 10000000 11111111 11111111 11111111 10000000
1 B `5 R( n$ n" V( T10 2进制 ... ...
* B0 P& d9 u+ e; g7 p 8421 11110111 11111111 11111111 11111111 11110111
% O) W3 i: B4 U" e' c$ j H- e-8 1000 11111000 11111111 11111111 11111111 11111000 , v6 l5 C( e/ n$ l3 J. m6 Y
-7 1001 11111001 11111111 11111111 11111111 11111001* d8 k/ I- k+ }, V! }( s5 t5 c
-6 1010 11111010 11111111 11111111 11111111 11111010 \ k3 f, q0 F# E' K0 F
-5 1011 11111011 11111111 11111111 11111111 11111011
! U- l: O( `+ d7 l4 J5 k-4 1100 11111100 11111111 11111111 11111111 11111100
" u9 B7 B S% @. p W-3 1101 11111101 11111111 11111111 11111111 11111101- B# Q, C# B6 U9 J4 j# b/ ?
-2 1110 11111110 11111111 11111111 11111111 11111110
$ g, E& p! `( F-1 1111 11111111 11111111 11111111 11111111 111111114 P* D3 M) Q$ z- |5 I" D
0 0000 00000000 00000000 00000000 00000000 00000000
% j5 X" g( w& l 1 0001 00000001 00000000 00000000 00000000 00000001% `6 ?3 {3 t a1 m2 j3 @6 x$ G
2 0010 00000010 00000000 00000000 00000000 00000010/ o5 z! ]) Z$ y! N
3 0011 00000011 00000000 00000000 00000000 00000011
2 U+ P) w0 @9 p2 D' d6 f 4 0100 00000100 00000000 00000000 00000000 00000100
4 o# @: r3 J$ _3 A- b* Q. f* A3 P 5 0101 00000101 00000000 00000000 00000000 00000101
" p' w7 B0 K" O; T9 } 6 0110 00000110 00000000 00000000 00000000 00000110
! f$ p( ~! L+ c 7 0111 00000111 00000000 00000000 00000000 00000111 ) p" x4 S- T8 b' e* z) b
00001000 00000000 00000000 00000000 000010009 c3 i- v9 s. }7 S
.... ...
0 f3 o4 |6 \9 g, q: a 127 01111111 00000000 00000000 00000000 011111111 A W5 ^2 `, B& W) G) D/ G" E
补码运算:2 M( D2 c4 j5 ~! ?* z" F0 u
-1 1111
5 ]1 Q+ a; |# X/ \5 j& o; W, _ -1 1111) I5 o6 V2 D; I! p- h- {3 g
*
) i( K4 l+ `" B( r ----------
' b3 x; ~5 u2 C3 B 1111
7 p# ~" o M% c5 {7 a" c1 _9 c+ } 1111* V' b0 y9 B3 t, c
1111
$ T2 e; @; e) R | 11118 F3 L- x# I' \6 d6 ~; w: R
1010101% b3 h7 z: u9 p7 @$ J/ |# D
-----------
* t2 ^1 m3 Y6 E 0001
( Z! s( W* s; n; f9 }
" o) y# ~! q2 G1 ~6 b: R 4) A Java 内部只有二进制补码, b N* l! V! j6 V- g% p
B Java 内部采用补码运算, 自动发送上溢出和下溢出
. b# g4 r, S) m* l- ^- U C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出9 i6 S0 e8 h/ b+ T! b
D 补码的负数 最高位是 1, 也称作符号位
2 |8 j) s7 e5 d n1 p8 @: [5 r# } 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
Q* y! `1 v* W* R6 i 16进制" ~7 H/ W# y7 z: ]
逢16进1* a3 Q: G) T. w/ n
基数: 164 \6 Q5 e7 l$ D$ X2 s
权: 16^n, 256 16 1
1 u7 |- n+ Y8 R) s6 Y 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
: |2 n; f1 P5 d1 C6 ~ v 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 `7 X$ l6 e" E/ t. u) c6 t 1 _8 C1 \5 ~- x2 z# P
41(16) = 4*16 + 1*15 c' g% y4 b9 ~* X- e
= 65(10). H5 z3 e x! }: r( R8 c* |
= 0100 0001(2)
( i- C+ N, f, Y5 ? 8421 8421
1 q* j' O# s( U 4 1 (16)
; t T* i$ G. g6 S% q$ Y+ t3 _% X+ f' C, x# t6 z/ |( o$ v) c# T
128 64 32 16 8 4 2 1 4 ]6 J9 B+ d7 R0 T8 x
0 1 0 0 0 0 0 1
& k) V( B' v8 c2 I: e" b. P( l B2 { 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 7 |/ w5 H9 d$ O! l( L
192(10) = 1100 0000 (2)7 T, V& ~' B+ k* q7 G- K
c 0 (16)- _3 }$ Z T2 i" V4 t t
-8(10) = fffffff8(16)
4 I$ l3 l! |" K! `3 j: s 进制总结:) H; B5 p7 q, S1 X- T
计算机内存只有 二进制补码
- ^* o- Z }9 y" @, V) T 默认输出, 按照人习惯输出10机制结果
& J" W# F& W- k8 r- }* Q 16进制是, 二进制的简写, 16进制本质就是2进制
# Y- N' ], z# }5 p" o; ` 16进制存在的价值: 方便书写2进制!
1 M+ S5 T8 U* _5 `* b4 z/ \
3 J; D2 v" W ?2 Q& m3. Java 数据类型: 分为引用类型和基本数据类型
6 x" ?( F% V- n5 @$ E2 t% ] 1) 基本数据类型: 8种
8 J) J- ~- b/ i, u' Y* i& x( a byte, short, int, long
; i- C; i3 K% _7 f8 X float, double
8 x7 S2 q+ p1 W6 C; H) z9 _6 W S char
4 y) E) Y2 A! O+ a. l7 ]& A boolean
1 ]. T+ W) w+ d$ A 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数6 o, J! `! P! Z' [1 J }: ?
byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
, B- Z8 E" {# N g8 f; j short 16位有符号数 0x7fff 32767 0x8000 -327684 ^2 L6 d V( ~! s) I1 O
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G ( T' ?% P4 U0 d# n: Q' q
long 64位 .... I1 e! ~+ @( _# C# x
整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给$ w6 h$ O8 y3 l8 [
小类型直接赋值.# {$ f$ t9 }7 K: t) x* b
使用整数类型(byte, short, int) 要注意取值范围, 超范围运算: D* o- E3 `; U* Y+ G9 J
java 底层byte,short 按照32位计算
1 G1 A' }2 \, V) y5 B/ E( H9 V" c; s5 w9 d5 _ ]
long 类型的字面量使用"L","l" 后缀
: z$ R) o1 J/ z2 b7 ^# I( Z0 T
0 @2 f* c' E0 N& V: j 3) 浮点数, 小数 (不必掌握 浮点数的存储方式); c8 Z# U4 w- U2 ?
浮点数原理: 10进制浮点数(科学计数法)原理
* x7 `1 F+ L7 A) T6 b 2356189. = 2.356189 * 10^6
8 L7 l2 W3 h7 S5 L6 j, e3 q- j9 R+ m/ m 概念: 尾数: 2.356189 6 k' z. K7 A3 f& u
指数: 6
' }1 L' Q& P' s( P$ g 基数: 10
( ], ^+ r! X6 m- n8 ?. e' } pi = 3.14+ t, ^3 Z( r) Z. T! R
3.14159265358979323846264331 t& D1 J2 D' `6 K
$ N' i9 T3 X' ` f: B$ x/ \- h
h5 G0 z& h6 G8 x Z, H( d8 n 二进制浮点数:; _" \, |9 k7 W o
101001010101. = 1.01001010101 * 2^1011) w3 \/ p) k, R, [/ q
概念: 尾数: 1.010010101018 `+ n; h w7 ~% N
指数: 1011
: w' n$ w$ i \ 基数: 2
* l+ ?0 ?3 ?' F& T# q- t
* z' P" F1 `8 F: F/ ] float: 32位 其中: 1位符号位, 8位指数, 23位尾数
, Z: E) D+ e3 S" r5 ?* D
1 l2 `9 A$ R- d) A 精度: 23 位1 a; p. a, v! [ A/ |$ E0 }7 S: \6 b
int max = 01111111 11111111 11111111 11111111/ u- Z6 S1 |2 ^' F( U t
float f = 1.111111 11111111 11111111 1 * 2^00011110
$ Y3 y! D1 D/ M% H$ `! B0 q- m' ~6 ^5 G4 ~& u4 j9 |9 [
double: 64位 其中: 1位符号位, 11位指数, 52位尾数7 ^& O+ u5 V$ i9 ]2 Q, W9 ? R6 u
" A" ?# O$ N0 y6 P/ K& I1 v 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
: s# m( n. [7 A: I( N' n& y% g5 H
$ |% e$ K% K; c4 e; U) Q. t 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数( i4 c5 q4 j& E5 H* p" d! k, \
数值是一个字符的unicode编码值. 0 o, ^8 B/ f3 F6 r( K; X0 {) X
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
; x; K V) e3 w& I& | 阿拉伯, 希伯来, ..... 8万+ 字符
& p) z' P3 F) d" Y' j 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.1 s" O5 o, k5 c9 g
ASCII: 0~128
& f3 x; o& y3 Q1 ^5 H2 ?' z$ { Java char 的范围 0~65535 不能表示全部unicode 但是可以表示6 R' \5 w$ t0 x
unicode只能够最常用的部分
! d J# f- N% D! b) I, K: p3 _* ?. k5 o9 u! _, P; _0 _
*最小值:0, 最大值:65535 = 2^16-1
- c) [$ Y& I5 H7 s7 D% g8 ] *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->4
4 \2 f* Y6 e, d9 U 字面量也是整数常量! 52 48 " F# N4 e, H0 S3 v
特殊字符采用转义字符表示:
5 _9 Z0 q" O8 q7 n, O& L" | 如: '\n' '\t' '\\' '\b' '\r'
& H4 h" X) @4 h- p* H% c9 d: k '\'' '\"' '\u4e2d'
! s- ~) H; v5 K& C% l3 l1 u
( D; A3 O- Q$ S) @ char c = '\\';& s0 G6 t7 T G: O; }# w
! q/ y6 _3 k! [! c" ~4 K9 `7 g 'X' - 'A' = N) c- R( }4 c. _; |# U
'x' - 'a' = N
/ f. U" G8 K7 {7 t/ R1 q. V* Z X = 'c' - 'a' + 'A'
% A9 u; G c+ {; ^! l; [( S8 `$ G( B
5) boolean 布尔类型 表达: 真(true)/假(false)* |+ E# D5 \7 G) M( @6 c8 ~6 ~
建议使用长变量名定义变量
! o( J' {2 Z- C- a boolean started = true;2 ~) ^# d$ o! {# G/ F0 M) \
boolean isMan = true;
: D! N; A: S5 M& B5 F isMan = false;4 U+ ^2 \' R4 q O) S
boolean used = true;//二手的
" |; U+ H- S. h$ \7 p if(used){* q; }& e1 u8 ~( i6 s
System.out.println("打八折"); ' y' b5 y- Q0 ~% y9 u" [! ^7 {- C
}% |9 s {8 v1 n
不建议 定义没有意义的变量; }: T4 o8 ` B8 R7 b& r5 T; I
boolean u = true;//u = you5 k# h' R: \" [4 } P0 ~$ ^, H
boolean flag = false;4 y- v* h2 x, V2 \, Q4 Z$ `
2 s9 P+ t* h0 U X if(flag){
5 X; k, m) R, u" N& ^ System.out.println("打八折"); O. R" Q4 p" Y* ]! l7 F
} 7 T" B% A4 d- _* L2 k
3 J* L' o/ H$ f
4. 数据类型转换
3 ]5 a* B9 C5 [" @, R char ->
. R) t/ D! F0 J8 W' B% m, k" i byte -> short -> int -> long -> float -> double
2 S) R# z: i5 j6 ]0 ~* {. `& D! D0 a" z1 T; _- A3 l& S
1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
2 K$ g" q @6 J: K( g; }$ [0 O3 j 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变- w# T5 ]( ]# p, }! Z: i5 j
注意, 整数到浮点数转换会损失精确度% P' h9 k* ]6 O
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
! l4 \0 a# `, ~
- M# }! D( X# P; B int i = -1;
6 m6 z" e; {8 c% } long l = i;' x8 y V2 \' M% i* @! I
; U" G( g# G# N+ p9 v3 u 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行 U* W, J0 L9 j
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围( |% U- ^5 u8 i+ ]: Y; Q
int i = 128+256;// 00000000 00000000 00000001 10000000
+ o" Q5 [3 T0 P# l byte b = (byte)i;//-1282 V! K+ N* U3 l5 T! y# [
, i7 t! m! H% L0 T5 ~ long l=0xf80000000L;4 W* Z& Y+ c* g# i6 a
int c = (int)l;//负数
- r9 F, y4 `1 _$ I
1 Q4 u! p2 C( f2 [ l = 8;; T: f( c; M" ?+ N3 m: I* Z
int d = (int)l;
' ~6 h; Z; ?6 C) e% j- T6 B6 I9 t, P7 ~; p$ m9 z* e1 A; C
float pi = (float)3.1415926535;//损失精度. }' D* }+ n0 Y/ a' n
$ ^5 D3 K+ z8 k4 R, U
char c = '0';; O+ m1 R3 M* z" @; J# X5 T
char x = (char)(c+2);
; k( F# ~$ W+ X- n8 m/ l. D" Q8 M3 L- C
|
|