java基础
进制之间转换与负数的二进制表现形式
二进制和十进制之间的转换。
十进制———>二进制。如6的二进制
其实进制之间转换就是一个除2取余数的过程,将二进制的结果的最底位做为二进制的最高位。 6/2=3…..0 3/2…..1
剩…1 用最底位来做为二进制的最高位则是110
二进制————>十进制 如110换十进制
二进制乘以2的过程
0*2(0)+1*2(1)+1*2(2) 0+2+4=6 假设其对应倍数为N
也就是二进制的第个值乘以他对应的位数的2(n-1)次冥然后将这些值相加得到的和就是这个十进制
我们在日常生活中使用的都是以十进制计数的。
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
其实这样你会发现后面这些值相加等于最大的一个值 -1例如这个就是127
注意十进制取值: 十进制是满十则进一取值为0-9
其他进制的转换
转成十六进制
十六进制是以0x开头表示 的,十六进制是由四位二进制组成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 A B C D E F
因为 是以0-9表示 所以10以后就是以A-F表示
比如的说二进制
0101 1010转换成十六进制
还是用转换成十进制的方式。只是将二进制全部分成4位做为一个个体最后合在一起就可以了
超过9的数字就用上面的字母表示
0101 1010
0101=1*2(0)+0*2(1)+1*2(2)+0*2(3)=1+4=5
1010=0*2(0)+1*2(1)+0*2(2)+1*2(3)=2+8=10(A)
0101 1010=5A 也就是0x5A
十六进制取值 : 十六进制就是满十六进一。0-9A-F
二进制转换成八进制
八进制取值0-7满八则进一
八进制是由三位二进制组成 例如:01011010转换成八进制
001 011 010 为方便观看所以在左边加了一个0
001=1 011=3 010 =2 将三个值 合在一起就是八进制了01011010=132
其实二进制转换成八进制、十进制、十六进制都是*2的过程
区别在于
十进制就是由二进制相乘了过后的值相加得来
八进制
因为八进制的取值是在0-7之间所以八进制就是由三位二进制组成的因为0111这样三个相加最大值为7
所以也可以说八进制的二进制值是以0开头的
十六进制
因为十六进制的取值在0-F(0-15)之间所以十六进制就是由四位二进制组成如1111相加 最大值为15
十六进制以0x开头。
负数的二进制的表现形式。
正数的二进制都是以0开头的
负数的二进制都是以1开头的
负数的二进制其实就是正数的二进制取反+1
例如:
9这个数吧二进制为1001 其实每个数的二进制都是以32位的形式存在的。只是我们平常省略了。
0000 0000 0000 0000 0000 0000 0000 0000 1001 =9
其实-9的表现形式就是取其正数的相反数+1我们先来取反吧
取反其实就 是将0变成1 将1变成0
0000 0000 0000 0000 0000 0000 0000 0000 1001 = 9
1111 1111 1111 1111 1111 1111 1111 1111 0110
执行+1操作
0000 0000 0000 0000 0000 0000 0000 0000 0001
1111 1111 1111 1111 1111 1111 1111 1111 0111 = -9
结论:
正数的最高位始终是0
负数的最高位始终是1
负数的十六进制最高位是F
java中的一些常识:
(1)在java中的所有程序代码都必须存在一个类,用class关键字定义 如:
修饰符(可有可无) class 类名(自定义建议写成这个功能的英文不能为关键字不能以数字开头)
{ 程序代码 }
(2)命名规则:
符号这些必须用英语输入
java中严格区分大小写、命名时不能是关键字 不能以数字开头
包名全部小写,
类名和接口名:所有单词首字母大写,
常量名全部大写,多个单词下划线隔开,
函数名和变量名;一个单词时小写,从第二个单词开始每个单词的首字母大写。
(3)java程序结构
java中所有程序分为结构做对和功能代码。
功能是执行语句最后用 ; 结束 不必对齐只要中间有空格制表符换行符等 等 分隔符就行了
(4)字符与字符串
'a'这是一个字符 '' 这也是一个空字符
简单的说就是许多的字符放在一起如'abc'这就是一个字符串、字符串之间用+号相连接
字符用+连接起来就自动变为了字符串
简单的说就是 '' 中如果 只有一个字符就是字符有多个就叫字符串
在字符的使用过侱中应该注意一点char ch='a'是print他的ascii码
(5)注释:
单行注释:
// 这是单行注释的表示符号 指的是这个符号后面的内容全部不在jvm中执行
多行注释:
/*...*/多行注释的表现形式。 指在这其中的内容不在jvm中执行
注意: 在多行注释中不能加多行注释。可以加单行注释
不能 /*... /*... */*/ 可以 /*...//..*/
文档注释:
/**...*/文档注释的表现形式。用来解释程序的,简单的说就是个说明书,在里面加上作者版本..信息
建议:在写程序的过程中多写一些注释一般在程序20%以上以提高程序的可读性、写程序一般应该以可以
性做为第一、效率第二
(6)常量与变量:
常量:常量就是固定不变的数值
常量分类:
1、整型常量 :可以分为八进制、十进制十六进制。
注意: 以十进制表示时第一位不能是0 以十六进制表示时需以0x或0X开头
以八进制表示必须以0开头 长整型必须以L做为结尾
整型整数是占4个字节 长整型整数是占八个字节
2、浮点数常量 : 有float(32位)和double(64位)
float(单精度浮点数)表示时一定要在后面加上f或F
double(双精度浮点数)表示时一定要在后面加上d或D
3、boolean型量 :
boolean的数就好比硬币只有正反两面一样只有两个值(rue)另一个值是 假(false)
4、字符常量 :将一个字母或数字、转义序列、特殊字符等字符所表示他的值就是
本身字符常量要用 ' ' 括起来。字符占用两个字节用Unicode码表示的
5、字符串常量 : 将一个或多个字符用双引号标识
字符与字符串区别:一个是用的单引号一个是用的双引号
6、null常量 :只有一个数值null(空)表示对象的引用为null
变量:
在java中内建有八种变量的类型来存储整数(byte、short、int、long)分别是8、16、32、64位的大小
浮点数(float、double)字符型(char)布尔型(boolean) 这些都 是基本数据类型。
引用数据类型: 类(class)接口(interface)数组
当数据不明确时需要进行存储就定义一个变量来进行存储
就是将不确定的数据进行存储。也就是需要在内存中开辟一个空间。
如果开辟空间呢?
就是通过明确数据类型和变量名称数据来完成的。
变量的格式:
数据类型 变量名=初始化值 如 int x=2
变量和常量区别:
一个的值 是可以改变的一个的值 不能改变
变量的有效取值范围:
double的变量在内存中占个字节、float的变量占4个字节、byte型的占1个字节等
小数常量的默认类型为double
(7)基本类型转换:
多类型的数据计算是统一转换最高的那个类型计算。
byte short char------int 这些类型都会自动转成int型的
自动类型转换:
byte short char不能相互转换,他们之间的计算自动提升为int类型在转换。不会丢失精度
强制类型转换:
就是将某个类型的数据强制转换成指定的数据类型但是会丢失精度。
如:
byte b=3 b=(byte需要转换成的类型)b+1 否则会报错 注1为int型的
字符串转换
任何值..与字符串相加都会变成【字符串
变量的作用域(scope)
作用域决定了变量的“可见性”“存在时间”
{
itn x=12;
{
int x=9;
x=x+4;
System.out.println(x);
}
x=x+1;
Sstem.out.println(x);
}//他们输出的结果就是最好的证明 变量的作用域是在它存在的代码块上
局部变量的初始化
在一个函数或函数的代码块中定义的变量称为局部变量
局部变量在函数或代码块被执行时创建,结束时销毁。
局部变量进行取值之前必须进行初始化或赋值否则会出现编译错误
函数与函数重载:
函数:
java中所有的函数都 包含在类中,类中的方法 也就是函数,因此可以说函数就是方法 方法就是函数。
简单的来说就是将一个功能提取出来封装起来做为一个独立的功能
在使用时直接调用就是了有三种调用方式
【1】没有返回值或不关心返回值
函数名(实参1,实参2...)
【2】调用时需要返回的结果
变量=函数名(实参1,实参2...)
【3】对于有返回值的函数的调用 也可以直接在程序中使用返回结果
System.out.println("second Acresge is"+getArea(2,4));
我们还可以利用reaturn提前返回比如说做一些带判断的调用 的时候如果条件不满足我们
就可以利用reaturn提前返回。
函数的传递过程:
int area=getarea(4,5); getrea(int x,int y)
在这里是对x和分配内存和传值 然后就是返回retrun x*y 也就是x,y被释放了
函数的重载(同名函数)overloaded:
就是允许在同一个类中有一个以上的同名函数只要满足参数个数或参数类型不同即可
java根据调用函数时所传递的参数个数和类型选择对应的函数,重载函数必须列表不同,要么是参数个数不同
要充是参数的类型不同。返回值可相同也可以不同。
思考:
如果两个数的函数的参数个数和类型都想同,但是返回值不同。行不行?
事实证明了是不行的。因为我做了一个前面的都相同是int型的但是返回double出来了有失精度。
java中的运算符:
算术运算 赋值运算 比较运算 逻辑运算 移位运算
算术运算符:
取模:
% 取模就是所谓的余数 ,左边小于右边,结果为左边,等于左边或者右边为1是结果为0。
负数取模的就这样说吧如下:
-5%2=-1 5%-2=1
字符串相加:
字符串和任何数据用+相连接都会变成字符串
前++和后++:
++a和a++优先级就好比下面这个例子
如:把a说成上课吧++说成吃饭++a是先吃饭(+1)再去上课(其他运算)。
而a++就是上了课(运算)再去吃饭(+1)。
但是不管怎么样的来说a始终都是又吃了饭又上了课。只是一个优先级的问题。
例子1 a=1 b=1 b=++a 和b=a++两个的值吧 b=++a=2 ;b=a++=1
但是上面a的值怎么都是2这个就很形象的说明了上面的问题
自减:其实自减和自加是一样的。只是一个是-1 一个是+1
除法 / :
其实这里的除法和四则运算是一样的只是值得注意的地方就是 这里的除法 只有整数没有小数
学了这些其实 就可以做一个运算了 print 0-9之间的值一直不停
定义一个变量让他一直执行++动作 然后再模拟10
转义字符:
就是通过\来转变后面字母或者符号的含义就叫转义字符。
system.out.println其实这个打印语句里面自带了打印完换行的如果我们将语句变成
system.out.print这样就没有了换行功能所以打印后面的ln其实就是为了实现换行功能不需要时干掉。
\b 退格符 \n 换行符 \r 回车符 \t 制表符 \" 双引号 \' 单引号 \\ 反斜线
\b应该注意不要使用在打印的语句最后边
如:class
{
public static void main(String[] args)
{
System.out.println("Hello World!\b");//这里加一个\b没有任何作用因为前面没有空格
System.out.println("\bHello World!");//这里加\b也没有用因为这里是一行的开头,只能在本行内退格
}
}
\n和\r一样的作用。因为现在多数都是用回车符换行。在代码中建议两个一起写因为有时一些系统不能识别
\\反斜线其实这样写的原因就是因为\功能“通过\来转变后面字母或者符号的含义”为了防止在输出\时将
后面的代码给转义了。
赋值和比较运算符:
什么是赋值呢?
其实简单的来说就是“=” 如int x=3
说一些特殊的 += - = *= /= %=
+= :x+=4//其实就是x+4的值赋给x 其实 x+=4就是将两边的值赋值给了左边
还需要注意的是 short s=4 s+=5和s=s+5区别
s=s+5:其实是两次运算 先做了加法再做赋值//这个不会做一个自动转换的动作。会编译失败
这句话编译失败是因为s+5加完为一个int型的值再赋给S是装不下的会丢失精度
s+=5:只是一次运算只做了赋值运算//这里做了一个自动转换的动作只要右边的值是在short的
范围内就会做自动转换的动作。
只做了赋值运算他内部有一个自动转换动作
小知识点: int a,b,c;连续定义三个变量但没有初始化
a=b=c=5;连续赋值。
比较运算符:
== 相等于 !=不等 <小于 >大于 <=小于等于 >大于等于 instanceof检查是否是类的对象
注:
比较运算符的结果都是boolean型的也就只有两个 要么是true要么是false 【我晕了改不了这的字的大小了】
注:
比较运算符“==”不要写成了“=”
逻辑运算符:
逻辑运算符:
逻辑运算符就是用于连接boolean类型的表达式。
&:("与"也可以说是“和”)什么是与?
例如:老师叫张三和李四一起去做作业。但是只有张三去了所以老师很生气。如果只有李四去了
老师也会很生气。如果两个都没去老师也会很生气。但是他们两个一起去了老师就不生气了。
所以得出结论:true&false=false false&true=false false&false=false
true&true=true
总结: 当两边都为真时其结果为true。否则其结果为false
| :(或)什么是或呢? 其实 简单的说,就是必须满足其中一个条件。
如:老师叫张三或(|)李四去做作业。只有张三去了老师高兴。只有李四去了老师也高兴。
他们两都去了老师也高兴。但他们两都 不去老师就会很生气。
true|false=true false|true=true true|true=true
flase|false=flase
结论:两边只要有一个为true结果就是true。如果两边都是flase其结果为flase
^:异或就是和|有点不一样
true^true=flase flase^flase=flase true^flase=true flase^true=true
结论:两边相同结果为flase,两边不相同结果就为true
!: 非【其实就是与指定的值相反的结果】
!true=flase !flase=true
&&: 其实和&(与)是一样的只是当左边为flase时右边不运算
&在左右无论是true是flase右边都要参与运算。
||: |: 无论是true是flase两边都参与运算
||:当左边为真时右边不参与运算,结果为true
左移和右移:
<<左移相当于乘以2的倍数
>>右移相当于除以2的倍数
移n位就相当于乘以或除以2的n次冥。
任何一个数右移32以及32的倍数其结果都是这个数本身(左移与之相同)
但是任何一个数右移(32-1)或32的位数-1其结果都将为0(右移后为负数且值都是相同的-2147483648)
注意:
任何一个数不管他怎么移位他都 不会改变他本身的值