|
该用户从未签到
|
1. java 变量( L: W/ m& [& [. e: B
1) 变量就是自然语言中的代词5 t1 I" ?; @7 |' u" k! {4 ]+ e
Person he; int age = 15; + k+ s) L0 T E. H
//age= 00000000 00000000 00000000 00001111
5 K; y' x8 a Q/ _# C T3 v" W/ u System.out.println(age);//15
# x( j+ [* L6 Y( W! R 2) Java 中的变量, Java是强类型语言,
, Y4 b) s* k4 ]5 `/ i7 c9 \ A 变量必须声明,并且初始化以后使用 int i=0;
7 W( J. k4 q5 B# x* U! n3 X B 变量必须有明确的类型$ Z2 G6 e7 N4 Y
C 变量不能重复定义
, D2 n5 T+ d; E& W- F2 |7 L 3) 变量的作用域8 ~# y1 c [: M9 j) _' M: \
a 在声明的地方开始,到块结束为止
( {3 k+ U7 W$ g' G+ q9 r+ N( E+ F" s b 离开变量的作用域结束,变量将回收。' F8 h9 n$ d# Y% g, y
& d7 t1 k: W8 i) ^0 g$ i W2. 进制转换基础2 ^3 T! O0 s9 r, w
1) 十进制
, ^, W/ v; U6 y+ a* f 逢10进18 Y; H. A; M5 ?& p" R2 Y- h
基数: 106 J- W$ x- X6 N' s" K
权: 10^n, 10000 1000 100 10 1
8 ?) U) |* k% l 23678(10) = 2*10000+3*1000+6*100+7*10+8*1 # P" w' s2 c- y5 s1 j8 b
= 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
: \ k6 K/ q6 ~. t = 23679
- ^ P0 m7 C( D8 c* i- V" e5 u" f& ~% B5 p: k' P7 t
2) 二进制
( z% { A4 o) {2 l3 g0 j/ w% i3 Q% n 逢2进1
3 ]4 o" m) l' v' [# `5 Z 基数: 2
8 s& a5 y2 a9 B 权: 2^n, 128 64 32 16 8 4 2 1
1 o/ O/ p( [1 @2 E5 ] 01000001(2) = 1*64 + 1*1
& J( `$ K2 |( K* k- o = 65(10)$ Y0 p% b8 [% w2 c9 r. { y
3) 补码基础
' `- O ]8 F5 N7 E( d -128 10000000 11111111 11111111 11111111 10000000
8 ~9 A* e, V* n2 a1 E% R V9 H10 2进制 ... ...; O4 `; M$ O0 z N; r
8421 11110111 11111111 11111111 11111111 11110111" ^& x. s- G: x+ Z
-8 1000 11111000 11111111 11111111 11111111 11111000 , z; F% L3 W" k( g% h. }- l
-7 1001 11111001 11111111 11111111 11111111 11111001
6 \& u* ^* j9 _-6 1010 11111010 11111111 11111111 11111111 11111010
! Y0 F1 L. I; |: X) |9 p8 w# ~% u-5 1011 11111011 11111111 11111111 11111111 11111011* ~+ Y( P! X' e, _: l6 Z2 o) A
-4 1100 11111100 11111111 11111111 11111111 11111100' B n5 w& V* U0 x
-3 1101 11111101 11111111 11111111 11111111 111111013 v8 ~: t* _& @: n! e
-2 1110 11111110 11111111 11111111 11111111 11111110% I$ J4 W$ }) H
-1 1111 11111111 11111111 11111111 11111111 11111111
Y% d0 P( q" R" d0 [ 0 0000 00000000 00000000 00000000 00000000 00000000' j; }; W! R& K5 b* I
1 0001 00000001 00000000 00000000 00000000 00000001
9 h& O2 r/ F' B' P9 D. \% Q 2 0010 00000010 00000000 00000000 00000000 00000010
7 p1 P7 s) D. _' S 3 0011 00000011 00000000 00000000 00000000 00000011
" {! P& |8 q3 X1 H 4 0100 00000100 00000000 00000000 00000000 00000100
7 A" ?- ~1 f! [2 n 5 0101 00000101 00000000 00000000 00000000 00000101
# f& q' x6 }. I$ N/ l 6 0110 00000110 00000000 00000000 00000000 000001105 Z( c. |9 B0 d8 E
7 0111 00000111 00000000 00000000 00000000 00000111
' ?- L& Z" \' E6 W 00001000 00000000 00000000 00000000 00001000
' I- E6 a; \6 m; v- @ .... ...% Q- c5 p; [% e
127 01111111 00000000 00000000 00000000 01111111: T, X; i+ M$ {" P5 E G4 n
补码运算:
1 j. n1 f& b& E/ e8 g3 j K -1 1111$ ? P( A; c, b6 G
-1 1111
8 n6 T" ^5 V, T: ~( s+ a% Q' O * p6 \5 R) t/ @' d$ J" T
----------
z$ A7 ^$ I+ z+ [! U 1111
( E E' L5 g* g V, t 1111
! z) l" A) Z$ l2 D8 Z& E 1111
5 B, T* K% i/ c T$ Q- v! u 11118 s, a( i' ]* _! w( W
1010101
' k0 e( ?6 y2 p7 M! E -----------4 j- J4 y4 e: f/ u
0001: {7 [) `5 \* _
) m# |1 h/ |7 I/ e/ o
4) A Java 内部只有二进制补码: a2 \! H6 u3 h$ ?
B Java 内部采用补码运算, 自动发送上溢出和下溢出
# Y l! M7 r& @* g- ]$ z C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出9 o& h* `7 \3 T! F6 D( i: s
D 补码的负数 最高位是 1, 也称作符号位
7 _) D" E% d) V$ b# _, Q- m 5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
: M( K+ O; t5 S8 ~5 j7 v- z 16进制5 c& ?( V3 r3 j$ q( B9 J6 T4 g; `% K
逢16进1
% N. q+ l4 d- K( C0 P& n; L 基数: 16
9 o" `9 G; d* h6 g* L 权: 16^n, 256 16 1 ' R. w! Z. F" h' d4 M v
16进制数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
9 Z# {! {( w- n/ C' K& T5 ^0 z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
6 E# D0 D* |9 x& P6 u$ { " S! M9 L" t( I2 M' v- C1 N
41(16) = 4*16 + 1*1
" H( g6 E5 N1 O8 } = 65(10)7 O; d+ m/ Q: N0 m% P8 A R- F n3 ]
= 0100 0001(2)2 K! ~: o$ [& E$ j- @2 W! z+ u
8421 84219 M( ~6 B1 G4 N* H& T; F& ~
4 1 (16)8 e) {- G1 q6 x+ D: |0 g, f
6 a$ M/ G7 h8 _* ^2 ^( @ 128 64 32 16 8 4 2 1 $ B. k, j( U$ O% ^+ W
0 1 0 0 0 0 0 1
9 e5 S$ l$ p, d; L' ^ 练习:转换以下十进制为二进制 192(10) 137(10) 145(10) 0 r' j7 K& G, o7 C" n, I
192(10) = 1100 0000 (2)
" V$ j4 x: N* X- A c 0 (16)8 g5 W) `/ b* K( z
-8(10) = fffffff8(16)
6 I# x% A8 }. J! F4 W 进制总结:
7 O( D& Q8 P' o! \" `9 d+ E, {! N/ R 计算机内存只有 二进制补码
1 |4 x8 Y; Z% U' ^) w! \+ L" r 默认输出, 按照人习惯输出10机制结果
% m) n. a, M- N8 ^1 \ 16进制是, 二进制的简写, 16进制本质就是2进制2 }+ z8 l! G. N( ~! `1 B$ r( p' L
16进制存在的价值: 方便书写2进制!" G* M* D- m9 i7 M4 p
& z4 B! |0 n) D s" U5 I0 y. [
3. Java 数据类型: 分为引用类型和基本数据类型
i# E- d8 {- ? 1) 基本数据类型: 8种
$ R/ {+ d ~9 }5 g byte, short, int, long
6 `- F) k" |+ f* R, ~: { f/ U float, double
* ]4 c3 C2 |- P& o S, | char
4 N* i4 Z6 F9 m b F$ o6 b. n" ` boolean
$ @3 D' M+ j( U! Y# Y7 { 2) 整数类型 byte, short, int, long, 都是有符号(补码)整数; ~3 P; c( x1 h I6 }5 R
byte 8位补码 最大值 0x7f 127 最小值 0x80 -1287 Z( c. C4 Z% Z0 M, q3 [
short 16位有符号数 0x7fff 32767 0x8000 -32768% L. q1 T% i4 H( z; x" O% q
int 32位 0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G ( F8 [' j7 N- g) n' D% D4 |
long 64位 ....
- `/ U7 V' j) _, `2 g2 e 整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
1 c2 h+ N& F% m, \5 `7 D, V 小类型直接赋值.
( P1 A0 @0 n$ `( }6 c 使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
8 t7 s! g x6 ]7 | java 底层byte,short 按照32位计算' H+ s' o k2 F1 y5 n2 W6 m
% n/ u- x: S2 Y3 K4 k long 类型的字面量使用"L","l" 后缀
# ~6 O' `0 M+ B/ ^# {. \$ S' P. W7 \
# V( N- b% Y" M, T; k/ G( D 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
; h4 V; e4 [+ z* n 浮点数原理: 10进制浮点数(科学计数法)原理" N0 x2 ?) [2 W! X4 {
2356189. = 2.356189 * 10^6* f& P+ ~7 G" |' a' G3 s$ z! N& O
概念: 尾数: 2.356189 9 ]& ]: z4 V0 c# F/ r
指数: 6( J" g' N6 a, a4 I z$ z
基数: 10) l2 b+ D/ m$ u) `8 x
pi = 3.14: [5 D: @/ A; d# S
3.1415926535897932384626433
: X: j j( [; _& P# @7 I8 ?& a
9 k; z o4 y% E7 t( Q
F3 @ b" y d% x% ?8 |# P 二进制浮点数:9 U. \) E! k# n
101001010101. = 1.01001010101 * 2^1011
! K6 M8 X5 c3 O, p# \4 \ S* t 概念: 尾数: 1.01001010101
}/ ~# l0 R3 z 指数: 1011/ a6 {% W3 B6 F# }
基数: 2# Y; I$ r# g- w( N& {6 H
5 H1 t; w8 b, o# Q' K float: 32位 其中: 1位符号位, 8位指数, 23位尾数& e6 U, ?7 C v9 K( B4 d% v
, W: c* \# f% U& c7 s, @! Q
精度: 23 位
3 m5 _# D6 w2 ]5 p! f" n& b int max = 01111111 11111111 11111111 11111111
; L5 F/ Y' K% P! A6 P2 {& } float f = 1.111111 11111111 11111111 1 * 2^00011110
# u$ i( M# F, M2 r) r: B6 Q/ x
9 K. N. m8 c0 x- g double: 64位 其中: 1位符号位, 11位指数, 52位尾数* ~' X( M1 i E9 ~ K7 ]
! p( e4 x8 D* b0 m; Z4 ? 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float {) j7 {, ^7 U3 H+ @
- A5 g0 g2 H; A, s
4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
; Y- j; w0 a/ P# h 数值是一个字符的unicode编码值. # ]# P- H( N ^: K$ K; b! V8 ?
unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
& X8 w* a4 d. o 阿拉伯, 希伯来, ..... 8万+ 字符0 w* `0 F8 }: O
其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.5 Y0 a# j2 _3 v8 N- p0 k
ASCII: 0~1289 l9 O2 D4 t! c9 ?& p
Java char 的范围 0~65535 不能表示全部unicode 但是可以表示3 m1 a" b6 }; I. l
unicode只能够最常用的部分
* `9 m+ M1 z/ h3 b7 M
E" {4 h2 s; b7 P1 M7 ? *最小值:0, 最大值:65535 = 2^16-1
1 z: z/ a1 ~& E' ]6 A& b; O *字符字面量使用单引号为定界符号:'中' '0'->0 '4'-'0'->47 T4 R! _* B( `9 x0 ], ^
字面量也是整数常量! 52 48 ' J4 o% ? x: p! H& z! o8 \( D
特殊字符采用转义字符表示:1 W- k2 b1 X( ?, H
如: '\n' '\t' '\\' '\b' '\r'
. V( E- Y& t( G '\'' '\"' '\u4e2d' ) ~7 A1 m* o+ N- Q$ ^) [
) A6 q: Q! `( q4 [$ w; j* i8 j char c = '\\';( R! H& K. \. C
0 K ]! P! s, I% @" h0 L" o 'X' - 'A' = N
- h; y9 M) R& ^8 Q6 t 'x' - 'a' = N
, @# u0 Y3 ?4 c, y+ ` X = 'c' - 'a' + 'A'
8 ~7 H: u, H1 o1 P+ y" K3 C) |
4 j2 K8 R- d. } 5) boolean 布尔类型 表达: 真(true)/假(false)
* E7 |7 Y+ D" E1 |! N" H 建议使用长变量名定义变量$ Z& n9 ]0 Q s5 o
boolean started = true;
$ N q9 }) v* C( Z% Y" U boolean isMan = true;5 p2 |4 E. i9 R4 a: v' G4 c& O
isMan = false;
9 p+ y$ V) G @/ F1 j8 A boolean used = true;//二手的5 @1 ?) `/ \7 a4 u6 _$ t1 S3 e* O
if(used){
8 M! \8 `: m( ] System.out.println("打八折"); 9 K [3 \7 n; V$ `
}
" T0 A0 c% z+ }, N1 X0 k 不建议 定义没有意义的变量
% _/ y6 _! m9 ]" M% g# r0 j3 k* u boolean u = true;//u = you
' D) R3 `0 ^0 s; ^2 O# q2 @ boolean flag = false;" }: Q n& S* }$ D0 y* c
- t a1 a: W, P5 }) R6 S" P2 j
if(flag){. x! I8 h3 ]3 I& J. O
System.out.println("打八折");
& h! {* @# Q% K3 k4 ]/ m+ S2 b }
( F; `* P7 J7 u, j% ?, L8 r
- _2 G9 X- H* z! w/ j, w4. 数据类型转换 " l" @* n- `' P6 L- w" R
char ->& p2 Q' L- F9 I, D
byte -> short -> int -> long -> float -> double
; U# N: y* M6 n, P% O! ?1 N
5 i6 @2 M- P" O 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
& c0 {; [2 N% e+ K 符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
+ \# ^# ^ ~7 Y7 V 注意, 整数到浮点数转换会损失精确度
4 a5 a3 ~! x& H, n C 自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
8 W8 s' Q/ }1 E* Q
8 M" Z' }/ P3 U3 J* T int i = -1;
% I! y" {7 m" m% w long l = i;) U/ ?3 j( l0 F4 T/ Z& z& {
, b& H: B, U! r3 y3 _ 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行) E1 H& }4 X2 W9 _4 P! l7 Q
的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围* }" [) W% a2 n- C) _
int i = 128+256;// 00000000 00000000 00000001 10000000 4 Q: X+ {( _+ ]6 t8 t; N# I7 X
byte b = (byte)i;//-128, E4 ~2 I4 E" g* Z
: K, [; }- D' S" k long l=0xf80000000L;& W K' w/ t' e2 q, L: g* A
int c = (int)l;//负数' M6 Z. B8 Q2 ?( d' q
" n8 ]1 [* o- Z l = 8;
`+ R4 G$ l# _1 V( ~5 r9 q9 S int d = (int)l;
% P) h( C8 [& `6 B, u( s- n: U* S* m. y% s
float pi = (float)3.1415926535;//损失精度8 u/ U7 B5 d- a0 i; R* F
' g4 C* ] G9 C, i; g: H
char c = '0';
% g, ]( a5 f2 { char x = (char)(c+2);8 ?9 C$ m& d' _; T
0 p+ y3 I+ a/ G* _" r |
|