该用户从未签到
|
1. java 变量
9 I1 ]. L) E2 Q+ Z# ?* Y 1) 变量就是自然语言中的代词" y5 z* M1 A% R2 p0 e8 @$ P
Person he; int age = 15;
8 c4 c$ e% m$ E' e$ L; `6 D4 |3 c //age= 00000000 00000000 00000000 00001111
3 b: |9 t: K( @1 w* b9 a) N System.out.println(age);//15% q7 F. b4 T* X3 i* i) ^
2) Java 中的变量, Java是强类型语言,. [, j/ k8 s, q2 S/ ]
A 变量必须声明,并且初始化以后使用 int i=0;8 F# u3 e- x' f
B 变量必须有明确的类型# H# o& r# T' b- ?$ O5 f, p
C 变量不能重复定义
, u* k3 C% `0 P7 [; n9 k- |! I 3) 变量的作用域
* B2 V4 p: r& I a 在声明的地方开始,到块结束为止9 R* F/ s$ Q. J8 o
b 离开变量的作用域结束,变量将回收。2 F' U6 a+ W: Q) W9 u" B# N
& W, e3 w+ h4 O/ L3 M
2. 进制转换基础
1 ~+ B* p( @. L- {) N 1) 十进制 7 h0 R7 u( Y& I9 a1 N! B1 v K! |: s
逢10进1
3 J* s0 {8 d" T! J+ ` 基数: 10
% {8 j( h: f. F( m 权: 10^n, 10000 1000 100 10 1/ x3 Z, J% r9 M/ i( p1 I; n/ ]9 s
23678(10) = 2*10000+3*1000+6*100+7*10+8*1 # u+ m, G a9 L/ r' Z3 b) t: w
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
# c; v' B: f1 [! {3 ?5 }3 Z& O = 23679$ U5 M( I2 x& t3 d. f
& g% H5 A" h8 Y% {! M; s 2) 二进制
; K; g1 W. O0 W- t( `- N 逢2进1) G- K+ Q, @8 F( I# ]/ o6 L6 a
基数: 2
4 f% |. p. \. }! m 权: 2^n, 128 64 32 16 8 4 2 1
7 e6 @; j: x+ {- l% Z6 x 01000001(2) = 1*64 + 1*1) S. t, Y- \# W0 c& \
= 65(10)
* Q4 A& ]. `) [, s' h" S% o 3) 补码基础- @; O$ Z0 o3 {. U( P% y9 b& Y! I1 e
-128 10000000 11111111 11111111 11111111 10000000
- }1 f ?5 ~$ G" l10 2进制 ... ...
* P8 E* l( ~9 z 8421 11110111 11111111 11111111 11111111 11110111- E: ]" E/ }% T9 @( h+ _
-8 1000 11111000 11111111 11111111 11111111 11111000 * O+ {8 f3 E+ i6 h7 g' d
-7 1001 11111001 11111111 11111111 11111111 111110018 W& M |# p5 y& `7 j3 C& ?
-6 1010 11111010 11111111 11111111 11111111 11111010% y7 M. `3 [& Q! j$ b) ~) v4 w
-5 1011 11111011 11111111 11111111 11111111 11111011
' L6 L& C+ O9 W0 n& m( v# z-4 1100 11111100 11111111 11111111 11111111 11111100
6 X/ p1 n! C! a( w* n! ]$ Q-3 1101 11111101 11111111 11111111 11111111 11111101& R3 d# ?& u# H }/ Z
-2 1110 11111110 11111111 11111111 11111111 11111110
! b4 @/ {# x- @9 \9 V-1 1111 11111111 11111111 11111111 11111111 11111111
$ R% n; }1 L3 t: ? \: e 0 0000 00000000 00000000 00000000 00000000 00000000
0 M9 u4 j/ ^* G" L 1 0001 00000001 00000000 00000000 00000000 00000001+ H8 I4 g% L' D& [. k
2 0010 00000010 00000000 00000000 00000000 000000107 w% Q5 X4 U9 ]+ Z
3 0011 00000011 00000000 00000000 00000000 00000011
F/ J ^- H. s# \ 4 0100 00000100 00000000 00000000 00000000 00000100. x& @* @. ?& c
5 0101 00000101 00000000 00000000 00000000 00000101
+ O9 s; @* s2 h% J& T$ J 6 0110 00000110 00000000 00000000 00000000 00000110+ C: v/ k' [. [- ~! G3 t6 c
7 0111 00000111 00000000 00000000 00000000 00000111 ( K* A; F- A8 ~- h* }
00001000 00000000 00000000 00000000 00001000
. S$ L! d2 o3 N3 j. ` .... ...
! C A) R, r5 \1 h+ d7 ?; H7 W 127 01111111 00000000 00000000 00000000 01111111
Z6 ?& _6 P0 L6 L8 m' ~: m 补码运算:
9 P( U8 q+ i$ l -1 1111
9 o" k# M* @3 w9 T+ S. K -1 1111
* k8 N0 |! y% ?+ R7 e( D * ' m8 t% U) J0 m2 A) X7 x5 k6 R
----------
! S* ^% y5 I" S% u 1111+ u T' v9 `1 T' f; R K ? n1 O
1111
/ i. a L$ R x6 c 1111
; \% p& h$ @- x! p- l" Q/ ` 11113 m1 ?4 c7 V* u2 K' i6 N
1010101
4 Q# R B2 d9 ~ -----------
- R0 e$ x/ Q1 f 00014 l# K0 n, ?5 y$ Z3 a$ M- N
( }! J! H! Y9 ~# E4 @4 U3 q5 L/ G 4) A Java 内部只有二进制补码
0 C" q& \! `3 e( q B Java 内部采用补码运算, 自动发送上溢出和下溢出
9 t; Y1 N N; }9 Q4 l8 \$ S C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出, G# h8 k: P/ ]& [: y0 L3 D
D 补码的负数 最高位是 1, 也称作符号位
+ o U# e% Z- d& U$ d# F4 i 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据% r9 ]( B; T3 J5 ?0 ]# q% y6 S* S
16进制) G7 w/ {" N3 `. a8 {: ~
逢16进1; c; r& h- o1 _
基数: 16$ d" B! |* s+ x' m& J; Q$ b
权: 16^n, 256 16 1
$ [' [) U8 n* G6 z4 }% { 16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f F4 b3 c6 S5 ]) e- Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 154 K9 S8 J, Y+ W/ P/ K
; ^% q( W, q D' J8 U5 i. G% ]
41(16) = 4*16 + 1*1" G! _/ U& I* T3 r4 W
= 65(10)7 {) X: t( F* Y
= 0100 0001(2)
& R7 w# S. H4 E) J+ h 8421 84217 b! _0 @& c3 N5 @7 a
4 1 (16)
& M9 v" _. `' {5 h/ `; I
- N: A6 V9 ]4 b4 l 128 64 32 16 8 4 2 1
# ~$ |1 u+ l1 j; H% C* W# g4 p 0 1 0 0 0 0 0 1
* Y9 |& X" R; x# k; q 练习:转换以下十进制为二进制 192(10) 137(10) 145(10)
) T" Q) h3 g- s1 X 192(10) = 1100 0000 (2)/ j! q' h6 ?$ d; Z
c 0 (16)
0 h1 c7 I% `2 w' e- F7 L: _+ c4 J -8(10) = fffffff8(16)9 ~. A* I# r- D# ~% b
进制总结:" L$ z" i% m; h! W, M) O
计算机内存只有 二进制补码6 ~1 `3 s8 T& t- G' l7 A/ A3 X j
默认输出, 按照人习惯输出10机制结果: F4 u& J: G' B; v$ R, {$ b
16进制是, 二进制的简写, 16进制本质就是2进制
0 p# e$ o- ^8 n* o+ t) h/ W" U9 b2 A 16进制存在的价值: 方便书写2进制!
- }2 C- @2 _( D1 V# G& q3 B. H, ]1 y
3. Java 数据类型: 分为引用类型和基本数据类型
# C% @# A9 ~' A 1) 基本数据类型: 8种' m& h8 I& N4 w, \$ j
byte, short, int, long, c4 e0 W. N. h. m4 c5 p
float, double & {2 e! E7 f" E; ~ e1 i# {
char( a& q/ f0 L# v J" P$ N' D
boolean. [. [# X S3 I0 Q' H$ m! J u
2) 整数类型 byte, short, int, long, 都是有符号(补码)整数
& ?1 G: S( n/ Q; \2 V2 O) Q byte 8位补码 最大值 0x7f 127 最小值 0x80 -128
) \, p4 @/ {0 ?& R2 \2 l short 16位有符号数 0x7fff 32767 0x8000 -32768- G% q a# t, Z$ @3 ]1 w; w# o" P
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G
1 W9 Y" a s1 k6 p& k long 64位 ....
/ q7 q: ?/ A' Q3 O; d 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给 U4 q( g, K: u1 @2 q+ f' \
小类型直接赋值.
2 {1 Y1 s4 K5 L" W% {8 O 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
* H7 ]: U' A0 T% z5 r8 f, @ java 底层byte,short 按照32位计算
3 A$ S/ b& z" x8 s/ c a
/ ^7 Y! `! S9 E' J long 类型的字面量使用"L","l" 后缀+ s4 G; [" F: v8 j% \& j, J5 x
/ X# r3 u4 p. ]$ r, _; E' N 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)( H7 P& A6 U F+ e, M! O; l
浮点数原理: 10进制浮点数(科学计数法)原理
- B* C4 B e9 |4 A 2356189. = 2.356189 * 10^62 n& l7 q. A( ]7 Z) T
概念: 尾数: 2.356189 , P: M* f& G7 T" @$ h
指数: 6
$ E z' a0 m( p5 z 基数: 10. P7 | l9 t' T$ K7 z5 s9 a! d
pi = 3.140 N6 `$ Y2 n3 x% [
3.1415926535897932384626433
" v T6 e* J5 `% N& z" |1 C
, ?3 [2 E0 D! s: w1 w2 y& H4 L6 k
6 b3 ~/ ~6 d. {4 @) n* ?/ j 二进制浮点数:4 k( |2 N- F! m' f
101001010101. = 1.01001010101 * 2^1011
W* U$ u9 R. Q; K 概念: 尾数: 1.01001010101
5 V3 c! E3 V8 @- k+ y 指数: 1011
% \/ z, b6 Y/ ~" e 基数: 26 P% K9 L0 S+ T! j0 f$ Z
4 q) ?2 a. r$ { float: 32位 其中: 1位符号位, 8位指数, 23位尾数
3 B# b" n/ X3 M# k4 L2 ~: V3 u$ A( T, _9 I
精度: 23 位1 b: }* A6 M7 b
int max = 01111111 11111111 11111111 11111111% i# c2 m" u2 ?. G. t" E
float f = 1.111111 11111111 11111111 1 * 2^00011110
5 c9 j- [9 y6 O+ V5 u8 n: M/ ^% @: b! g$ V( {
double: 64位 其中: 1位符号位, 11位指数, 52位尾数5 B8 T6 [' {% P4 R# ]; c) j) f
) ]# z; W2 H7 } 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
4 F" S$ n7 p- ^4 ]- e7 F0 y- p! J% v0 {
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
% H* ^% u3 i' {& Y: g 数值是一个字符的unicode编码值.
; d9 [$ v! z' ~ unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩/ R5 [- ^6 _7 }, V7 Y7 t2 P/ _
阿拉伯, 希伯来, ..... 8万+ 字符
+ s: K7 k- E+ Z* s5 }* h 其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
1 B4 {) b7 V7 l$ o0 B" p* x ASCII: 0~128/ M5 ~3 J% S7 v- ^; A* v' W
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
; m8 Y) T% G1 A' B unicode只能够最常用的部分% ]( T. W" e( }: M7 @) U, f- K
a' v$ j, ~2 H+ u" B2 v! K! l
*最小值:0, 最大值:65535 = 2^16-1( l _# N7 T5 `$ B& O
*字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->42 k/ V2 K. s9 G) D! z, I( D
字面量也是整数常量! 52 48
6 Y# ?* t3 b) d/ g6 c 特殊字符采用转义字符表示:
' f$ v' I* L/ Y, E1 B7 o; _ 如: '\n' '\t' '\\' '\b' '\r'
' L1 {% p" f# A, z. U! ?9 y '\'' '\"' '\u4e2d' * ^7 C- X* C% e1 g f+ V' z" ~
6 e* b0 q' Z8 r+ v1 F& L char c = '\\';
/ [3 T. q8 O, d' C' U4 q2 X+ z$ T3 H3 G( @4 l6 U
'X' - 'A' = N+ K; D6 {: S% L: ]$ K' T4 ]% ]& I
'x' - 'a' = N
; ~/ R5 V( `5 q7 P- ~( u X = 'c' - 'a' + 'A'3 f! ?+ z" F- _. e# l$ e
+ y. ?$ E8 \ B# k
5) boolean 布尔类型 表达: 真(true)/假(false)4 m, i0 ~9 A; J1 l3 K+ i1 E8 y
建议使用长变量名定义变量2 g" } d+ w L! v2 _* ]- o
boolean started = true;
9 {; s( Q4 S, _# u7 [# C& v2 I boolean isMan = true;
: I: h1 G9 d7 h( O isMan = false;
" [2 ]4 D1 o) ?! g" c' B boolean used = true;//二手的
, K u9 b5 |6 N% b h9 c if(used){* z! k9 v" y% T; ~- N
System.out.println("打八折");
% g, [, B8 x* I }
5 U2 H/ v; P/ z% U$ G U+ u0 S 不建议 定义没有意义的变量 a- _% I, h( O) \9 q+ H6 n. P
boolean u = true;//u = you+ B2 L$ b& z' W' r4 y& h
boolean flag = false;9 z4 l6 }8 L7 w" y- W$ Y
. F8 G% Y& z2 [; T+ Z% a: v
if(flag){# F# N. P/ s. X0 N, M, A
System.out.println("打八折"); & s% g8 S& I# j
}
7 _/ f$ L( Q0 f1 j8 @, x
/ i/ R$ _ O: c; Y' L4 E' }8 `4. 数据类型转换
: H) V4 F. }. L0 c, Y6 J" a: } char ->* a& c' A) r. ]% R
byte -> short -> int -> long -> float -> double
3 |. l! n& B- F& `; I F, z
4 l! q: @/ s8 U$ O 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成8 `/ D1 \# n/ U4 S) [9 u: }
符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
: ]1 h V: K7 K9 M( A) @ 注意, 整数到浮点数转换会损失精确度) O% W& n, T1 m
自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
5 K0 ]& C0 \& J d: |3 o1 }9 K# @3 [6 [; E( k6 v
int i = -1;2 p4 v' l! q% ~) a% q6 U8 J8 n
long l = i;0 p9 {& X5 _$ {- `1 `" n
0 B" l8 U" R2 H& N4 i& D 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行% ?2 Z w! B9 z5 p* i) U
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围# h, p- Z5 }4 N" w! `, V5 s
int i = 128+256;// 00000000 00000000 00000001 10000000
. f- j- B, Z4 M6 Q6 h byte b = (byte)i;//-128
! S# z) Y6 I# H( a8 y* O% e- t+ }( u# B# | u
long l=0xf80000000L;8 q* T9 x' a4 |7 w" u. u N
int c = (int)l;//负数
7 O4 O* d5 A, n6 Q; |3 ]( O5 a- W( O7 \. n3 L
l = 8;8 ~3 @& p+ m& k) G
int d = (int)l;
- D# v, v9 D% i, ^: ^
7 C, E- ~! E; U; S' J. t float pi = (float)3.1415926535;//损失精度
) ^. V6 {$ N; H8 j' S
8 E+ X* r7 U- i7 x char c = '0';
3 _- s5 l6 ^+ u5 | char x = (char)(c+2);
; \3 v, F% ]$ x' o% c @! E: D( _+ S6 l# _0 M3 b% N
|
|