Day02

数据(Data)


是系统的核心,我们编程的目的就是为了操作数据(增,删,改,查)


在代码中如何定义和存储数据呢?需要通过变量或者常量以及数据类型


注意:Java是一种强类型的语言,也就是说任何数据都需要有类型.
    JavaScript,弱类型的编程语言,定义变量时无需声明数据类型


Java语言分为基本类型和对象类型两大类数据类型(无数种)
1)基本类型(8种):
名称            容量 范围 默认值
byte     字节型 占1字节=8bit -128~127 0
short     短整型 占2字节=16bit -32768~32767 0
int              整型 占4字节=32bit -2147483648~2147483647 0
long     长整型 占8字节=64bit -2^63 ~ 2^63 - 1 0
float     单精度浮点数 占4字节=32bit -3.4E+38 ~ 3.4E+38 0.0
double     双精度浮点数 占8字节=64bit -1.797E+308 ~ 1.797E+308 0.0
char     字符型 占2字节=16bit 'a' , 'B', '您' \u0000
boolean     布尔类型 占1字节=8bit true/false false


注:1.JAVA中所有的数字都是带符号的
   2.字符型和字符串是不同的,字符型用单引号,字符串用双引号
     char c = '您';
     String s = "好好学习,天天向上!"
   3.java中,你写一个整数,默认是int类型的,写一个小数,默认是double类型的.
     float f  = 3.4;//编译错误,3.4默认是double类型的,不能赋值给float类型的变量


   4.cmd命令行中查看中文字的unicode编码的方法
a.打开命令行
b.输入native2ascii回车
c.输入想查询的中文字回车即可得到对应的unicode


ctrl + c 关闭当前转换进程




2)对象类型
     内置对象类型(API)
    Scanner,Math,Random,String...


     自定义对象类型
我们编程时写过的所有类都是自定义对象类型
-------------------------------------------------------------------
特殊符号:
\t 制表符          表示隔开一个tab的距离
\n 换行       到下一行的起始位置
\r 回车     到当前行的起始位置
\b  退格        相当于键盘上的BackSpace
\\  反斜杠
\" 双引号
\' 单引号
-------------------------------------------------------------------


变量


语法
数据类型 变量名 [= 给变量的初始值];


注:
变量名和类名一样,都是由数字,字母,_,$组成并且不能是数字开头
变量名可以是中文汉字,但是不推荐,因为可能出现乱码问题
变量名尽量首字母小写,以后每个单词首字母大写(常量除外)


|.可以在声明的时候直接初始化(第一次给变量赋值)
  如:int i = 100;
   double d = 3.14;
   String str = "你好!";


||.先声明变量,在使用前,初始化
  如:int i;
   .....
   i = 100;


字面量:就是指代数据本身,它也属于变量
"你好!",'A',3.14,100


注意:所有程序都是由变量所组成的!




给变量赋值的方式:
a.字面量赋值
  int i = 3;


b.方法赋值
  public int add(int i,int j){
return i + j;
  }


  int i = add(3,4);


c.表达式赋值
      表达式:由变量和运算符组成的合法的语句
  int i = sc.nextInt();


  int a = 1, b = 2;
  int i = a + b;


----------------------------------------------------------
常量


在变量的基础上加一个关键字 -- final


常量一定要初始化,它的值是不能改变的


如:
final int ROW_EACH_PAGE = 10;//定义了一个常量


常量的命名规则:使用大写字母,并且中间用下划线隔开


注意:常量比字面量携带更多的信息,提高了代码的可读性
----------------------------------------------------------


数据类型转换:
1.自动类型转换(隐式类型转换)
  由精度小的数据类型可以自动转换成精度大的数据类型


如:byte -> short -> int -> long
   char -> int
   boolean -> int //error
   
   double d = 3;


2.强制类型转换
  由精度大的数据类型往精度小的数据类型转换时,可能损失精度,
  编译器会报错,必须采用强制转换
  如:
  1)在所需转换的数值前面加(类型)
    注:这里的类型,可以是基本类型,也可以是对象类型
    int i = 220900;
    char c = (char)i;


    float f = (float)3.14;


  2)只有long,double,float可以这样转换
    在所需转换的数值后面加L/l,D/d,F/f
    float f = 3.14F;


    注意:
    在JAVA中,两种数据类型进行运算时,结果都是偏向数据类型
    更大的那一方


----------------------------------------------------------
1byte = 8bit
1K  = 1024byte
1MB = 1024K
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
1YB = 1024ZB
1BB = 1024YB
1NB = 1024BB
1DB = 1024NB


注:手机流量是以1000为计算界限的
----------------------------------------------------------


进制
二进制:只有0和1所组成,每遇到2进1


二进制 十进制
0101 1*2^2 + 0*2^1 + 1*2^0 = 5
1010 1*2^3 + 1*2^1 = 10;
1111 15


二进制转十进制
先从右往左标记,从0开始,,然后累加相应位置数字乘以进制数的标记次方


十进制转二进制
连续除以2,然后倒取余数


-------------------------------------------------------------


0011 1000  ---> 56
0001 1100  ---> 28
0000 1110  ---> 14
0000 0111  ---> 7


位移运算 -- 所有运算中效率最高的
二进制中,向右移动一位,相当于除以2,向左移动一位,相当于乘以2




八进制:由0~7组成,每逢8进1
032 0*8^2 + 3*8^1 + 2*8^0 = 26




十六进制:由0~9和A~F组成,以0x开头
int i = 0x0029;
2*16^1 + 9*16^0 = 41


小练习:
求出0x0419的二进制?
0x0419
求十进制:4*16^2 + 1*16^1 + 9*16^0 = 1049
求二进制:0000 0100 0001 1001




系统内置的转换方法(十进制转换成相应字符串):
toBinaryString(int i) 转换二进制字符串表示
          
toHexString(int i) 转换十六进制字符串表示
         
toOctalString(int i) 转换八进制字符串表示
------------------------------------------------------------------


运算符


|.算术运算符
+ 1.数学运算
2.字符串的连接

注意:
当+两边都是数字类型时,则进行数学运算
当+两边有一个是字符串或者都是时,则是字符串连接

- 减法(负号)
* 乘法
/ 除法 100/3 = 33 100/3.0 = 33.33333333
% 取余 100%3 = 1


= 表示赋值    int i = 3;   把3赋值给int类型的变量i
== 表示等于    返回类型:boolean


+= -= *= /= %=
如:
b = b + 1;  -->  b += 1;//后面这种写法可以避免类型转换问题


++ 自增
-- 自减
前++ 表示++写在变量的前面,表达式和变量的值本身都加1(先自增,后赋值)
后++ 表示++写在变量的后面,表达式的值不变,变量加1(先赋值,后自增)


位移运算:性能是最高的
<< 带符号左移位
>> 带符号右移位
>>> 不带符号右移位


注意:没有不带符号左移位(<<<)




面试题:
请你用最快并且性能最高的方式得到4的3次方?




算术运算符是一种二元运算符,需要两个参数来参与
对算术运算符来说,操作数只能是数字类型(整型,浮点型)
特殊例外:字符串可以用+运算(拼接)


低精度和高精度做运算时,结果是高精度
相同精度数据进行运算,结果是它本身的数据类型




||.比较运算符(返回布尔类型)
< 小于
> 大于
<= 小于等于
>= 大于等于
!= 不等于


|||.逻辑运算符


&&  短路逻辑与 同真为真,同假为假,只要有一个为假,结果为假


|| 短路逻辑或 同真为真,同假为假,只要有一个为真,结果为真


! 逻辑非 表示取反


如:
boolean b1 = true;
boolean b2 = false;
boolean b = b1 && b2;//false
b = b1 || b2;//true
b = !b1;//false


注意:
&  1.非短路的逻辑与(一般不用)
   2.按位与


|  1.非短路的逻辑或(一般不用)
   2.按位或


短路型和非短路型逻辑运算符的区别:


短路型运算符,如果运算符左边的结果可以决定整个式子的结果,
那么右边部分就不会执行了
所以,我们在编写代码的时候,需要考虑一下,把哪个条件放在运
算符前面
用逻辑与时,把两个条件中可能为false几率更大的一个放前面
用逻辑或时,把两个条件中可能为true几率更大的一个放前面
这样可以提升整个软件的性能.




||||.按位运算符
& 按位与 同0为0,同1为1,不同为0
| 按位或 同0为0,同1为1,不同为1
^ 按位异或 相同为0,不同为1


公式:
一个数连续异或同一个数两次,结果是它本身
5 ^ 7 ^ 7 = 5


如:
5的二进制:0101
7的二进制:0111


  0101
& 0111
------
  0101  --  5 & 7 = 5  


  0101
| 0111
------
  0111 --  5 | 7 = 7


  0101
^ 0111
------
  0010  --  2 ^ 7 = 5
^ 0111
------
  0101


~ 按位取反

负数,在计算机中是以补码的形式存储的


补码 = 原码取反 + 1
~x = -(x + 1)


负数的二进制如何得到?
2的二进制 00000000 00000000 00000000 00000010
按位取反 11111111 11111111 11111111 11111101
再+1 11111111 11111111 11111111 11111110
-2的二进制 11111111 11111111 11111111 11111110

~5 = -6
0000 0101
1111 1010
||
0000 0110
1111 1001
1111 1010


练习:
~4 = -5


0100 -> 1011


0101 -> 1010 + 1 -> 1011




-16的二进制:


16的二进制:00000000 00000000 00000000 00010000
按位取反      :11111111 11111111 11111111 11101111
+1     :11111111 11111111 11111111 11110000


--------------------------------------------------------------


三目运算符 ? :
作用:条件判断


condition ? expression_1 : expression_2;
条件?表达式1:表达式2;


当条件成立时,执行表达式1,当条件不成立是,执行表达式2


相当于
if(条件){
//表达式1;
}else{
//表达式2;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值