整数数据类型与运算符

先把上次没讲完的接上~~

基础程序分析

例如:

关键字:package

包路径和磁盘上的目录是对应的,在磁盘上创建相应的目录有两种方式,第一种是手动创建包对应的目录,当然这种方式是不可取的,太麻烦!第二种是带包编译,编译时指令:

-d 后面跟的是生成目录的路径,此处为“.”,表示在当前目录下创建包目录。

现在有了包之后,运行时指令也有所不同,没有包的时候运行指令为java 类名,但是现在需要加上类的全限定名,指令为:java 包名.类名

包的引用

关键字:import 后面跟的是完整的类名(全限定名)

作用是声明如果该程序中用到Scanner类的话就去这个路径去找,这样一来就不用在每次使用类的时候都写全限定类名了。可以使用*作为通配符,比如:

这样一来,就包含了java.util包下的所有类,但是不包含子包。但是有些类是不用导包的,比如String类,它是属于java.long包下,因为这些类太常用,几乎每次都要写,所以编译器就默认提供了"java.long.*"

编程习惯

为了提高程序的可读性所以需要遵循一些编程习惯

1.注释

//单行注释

/* */多行注释

/** */多行注释 配合javadoc工具使用,指令:javadoc -d doc Hello.java

2.缩进

同级代码左对齐,每行一句代码

每进入一个代码块{}缩进一次

3.标识符语法:

字母,数字,下划线,货币符号,数字不能开头

不能使用关键字和保留字(goto const)另外还有三个不能使用true ,false ,null

大小写敏感

没有长度限制

习惯:

1)望文生义

2)大小写

类名:单词首字母大写

变量名/方法名:首个单词小写,后面的单词字母大写

包名:全小写

常量名:全大写

整数基本数据类型

1.byte 1B -128~127

2.short 2B -32768~32767

3.int 4B

4.long 8B

重点解释为什么byte的长度为-128~127

一个字节占八个比特位,第一个位是符号位,符号位为0表示正值,1表示负值,比如说

这里负数的表示使用到了“补码”,补码的原则是:按位求反,末位加一;首先将00000101按位求反为111111010,然后末位加一,变成了11111011。计算机是只会做加法的,无论是加减乘除,计算机都会转换为加法来处理,比如说12-5,计算机会将其转换为12+(-5)来处理,12的二进制00001100,-5的二进制11111011,二者做加法为100000111,但是现在变成了九位,但是一个数据单元只有八位,所以最前面的一位就会被舍弃掉,结果就是00000111,转换为十进制就是7。使用补码的好处就是便于将减法转为加法。

接着说为什么byte可以表示的最大值是127,总共是八位,除去第一位是符号位,还剩下七位,能表示的最大数就是01111111,这个数的十进制就是127,最大值+1就等于最小值。01111111+00000001=10000000,结果的符号位1,表示这个数为负数,所以要按位求反,末位加一,按位求反之后:01111111,末位加一之后:01111111+00000001=1000000,十进制为128,但由于是负数,所以是-128。

字面值

什么是字面值,比如int a=10;那么这个10就是字面值。

如果字面值是以0开头,例如int a =010,表示的是8进制。

如果以0x开头,int a=0x10,表示16进制。

如果以0b开头,int a=0b10,表示2进制(java1.7版本之后才有)。

需要注意的是,在二进制中八位表示一个字节,但是在十六进制中两位表示一个字节,比如1010 0101换成十六进制为A5。

当定义byte x = 10;的时候,编译器会先将字面值当作int类型的处理,然后在降级为byte,但是存在一个问题,当定义long x = 30_0000_0000时,编译器又要把字面值当作int类型处理,但是这个值是超出int所能表示的最大范围的,这个时候编译就会出错,所以为了避免这种情况的发生,在定义long类型的时候,在字面值的后面加上一个“L“,这就是等于告诉编译器,不要把这个值当作int值处理,这就是一个long类型的!

运算符

+ - * / % = += -= *= /= %= ++ --

需要注意的是11/5并不会等于5.5,而是等于5,为什么?

当两个数进行运算的时候,比如参加运算的数为A,B,编译器会判断A和B的数据类型,然后根据它们的数据类型为结果值开辟一个空间,系统默认的数据类型为int,如果AheB的数据类型比int小,则结果的数据类型为int,如果A和B的数据类型比int大,那么结果的数据类型取最大的那个。暂时讨论的都是整数,不考虑浮点数,两个int值做除法,结果也是int类型的,虽然结果是5.5,但是存为int值时,会将小数点之后的值舍弃掉。

位运算符移位运算符

无符号右移如果是针对正值,效果与右移是一样的,负值时则不一样。

异或运算的应用:

1.假如说一个数组中有1001个数,每个数都有一个与它相同的数成对出现,唯独一个数是没有相同的数与它匹配的,如何找出这个数,

方法:将数组中的所有数一起求异或,a^b^a=a^a^b=0^b=b

2.有两个值a,b,如何在不使用第三个变量的情况下将a,b的值互换

方法1,使用异或,a=a^b b=a^b a=a^b

方法2,a=a+b b=a-b a=a-b

3.加密的运用

将所有数据与一个数(这个数就是秘钥)求异或,解密时,再与这个秘钥做一次异或。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180720G027QB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券