JAVA基础2——进制运算&数据类型&变量


JAVA基础2——进制运算&数据类型&变量

  • 常量
  • 进制转换
  • 原反补码
  • 变量
    • 数据类型
    • 数据类型转换
    • 字符和字符串运算规则

常量 常量:在程序执行的过程中其值不可以发生改变
Java中常量的分类
  • 字面值常量
  • 自定义常量(面向对象部分讲)
    字符串常量——用双引号括起来的内容
    整数常量——所有整数
    小数常量——所有小数
    字符常量——用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号
    布尔常量较为特殊——只有truefalse
    空常量null(数组部分讲解)
public class Dome1_Constant {//constant 常量 public static void main(String[] args){ System.out.println("abc123; ; ; "); //字符串常量 System.out.println(564566); //整数常量 System.out.println(456.456456); //小数常量 System.out.println('abc123; ; ; '); //''中必须放的是单个字符,10代表的是1字符和0字符 System.out.println(''); //中什么也不放,也是不可以的,因为代表不了任何字符 System.out.println(' '); //带表空格字符 System.out.println(true); //boolean类只有两个值,true和fals System.out.println(false); } }

下面是错误提示:
JAVA基础2——进制运算&数据类型&变量
文章图片

进制转换 二进制
由0,1组成。以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)
八进制
由0…7组成。以0开头
十进制
由0…9组成。整数默认是十进制的
十六进制
由0…9,a,b,c,d,e,f(大小写均可)。以0x开头
任意进制到十进制的转换原理
系数:就是每一位上的数据。
基数:x进制,基数就是x。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数×基数的权次幂相加即可。
十进制到其他进制转换
规律:除基取余,直到商为0,最后,余数反转就是结果。
8421快速转换法
1 1 1 1 1 1 1 1
1*27 1*26 1*25 1*24 1*23 1*22 1*21 1*20
128 64 32 16 8 4 2 1
十进制到其他进制时先转为二进制,然后二进制再转换为其他进制
104=64+32+8=01101000
【JAVA基础2——进制运算&数据类型&变量】二进制到八进制:
从右往左,每三位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。
01101000=001 101 000=150
二进制到十六进制:
从右往左,每四位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。
对应位上的数据,应该是十六进制的。
01101000=0110 1000=68
原反补码 原码:是二进制数的有符号表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
举例 符号位 数值位
+7 0 000 0111
-7 1 000 0111
在计算机中,数值一律用补码来表示(存储)。
主要原因:
  • 使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。
  • 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
正数:原反补码相同
负数
反码符号位不变,数值位按位取反,0变1,1变0。
举例 符号位 数值位
+7 0 000 0111
-7 1 111 1000
补码 =反码加1
举例 符号位 数值位
+7 0 000 0111
-7 1 111 1001
变量 声明变量的格式:
  • 数据类型 变量名 = 初始化值;
byte b = 10; System.out.println(b);

  • 数据类型 变量名;
    变量名 = 初始化值;
    使用变量
byte b; b = 20; System.out.println(b);

数据类型 分类
  • 基本数据类型
  • 引用类型(类,接口,数组)
基本数据类型
4类8种,区别在于他们在内存中的存储空间大小不一样。
类别 种类 名称 占位 范围 说明
整数 字节 byte 占1个字节 -128~127
短整型 short 占2个字节 -215~215-1
整型 int 占4个字节 -231~231-1
长整型 long 占8个字节 -263~263-1 其后跟L或者l标示
浮点数 单精度 float 占4个字节 -3.403E38~3.403E38 其后跟F或者f标示
双精度 double 占8个字节 -1.798E308~1.798E308
字符 char 占2个字节 0~65535
布尔 boolean 占1个字节 理论上是占1/8个字节,但java中没指定其大小 true\false
注意:整型默认是int;浮点型默认是double。
public class Dome1_DataType { public static void main(String[] args){ //整数 byte b=127; int i=43524; long l=5345768342L; //后面最好标注大写L short s=5635; System.out.println(b); System.out.println(i); System.out.println(l); System.out.println(s); //浮点数 float f=3242.234234234F; //后面最好标注F or f double d=234234.2352342342342357658; System.out.println(f); System.out.println(d); //字符 char c='a'; System.out.println(c); //布尔 boolean b1=true; boolean b2=false; System.out.println(b1); System.out.println(b2); } }

  • 作用域问题 : 同一个区域不能使用相同的变量名
  • 初始化值问题 : 局部变量在使用之前必须赋值
  • 一条语句可以定义几个变量
数据类型转换 数据参与运算
参与运算的数据类型要一致。
转换规则
  • 布尔型不能参与运算
  • 整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
    • 容量小的类型默认转换为容量大的数据类型;
    • 数据类型按容量大小排序为:
      byte,short,char-
      byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型
  • 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意
  • 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
public class Dome_DataTypeConversion {//conversion 转换 public static void main(String[] args){//隐式转换 int a=8; byte b=10; a=a+b; System.out.println(a); //强制转换 int x=9; byte y=7; y= (byte) (x+y); System.out.println(y); byte b1= (byte) (120+79); byte b2=(byte)300; System.out.println(b1); System.out.println(b2); } }

错误代码示范
public class Dome1_DataTypeConverson1 { public static void main(String[] args){ byte x1=3; byte x2=6; byte x3=x1+x2; /*1,byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型 2,x1和x2是两个变量,变量存储的值是变化,在编译的时候无法判断里面具体的值,相加有可能会超出byte的取值*/ byte x4=3+6; System.out.println(x3); System.out.println(x4); //x4可以正常输出的原因是java有常量优化机制 } }

错误提示:JAVA基础2——进制运算&数据类型&变量
文章图片

注意:
变量无法直接运算,而常量可以
因为java有常量优化机制
float为什么比long大?
long有8个字节而float有4个字节
IEEE754规定
4个字节是32个二进制位 1位是符号位 8位是指数位 23位是尾数位
00000000——11111111
0到255 其中0代表0 255代表无穷大
1到254每个指数位减去127
-126到127
long: 2 63 ? 1 2^{63}-1 263?1
float: 3.4 × 1 0 38 > 2 × 1 0 38 > 2 × 8 38 = 2 × 2 3 38 = 2 × 2 114 > 2 63 ? 1 3.4×10^{38}> 2×10^{38}> 2×8^{38}=2×{2^3}^{38}=2×2^{114}> 2^{63}-1 3.4×1038>2×1038>2×838=2×2338=2×2114>263?1
它们底层的存储结构不同。
float表示的数据范围比long的范围要大
字符和字符串运算规则
public class Dome_DataTypeConversion2 { public static void main(String[] args){ System.out.println('a'+1); //98,因为有ASCII码表,a字符对应的是int类型的97 System.out.println((char)('a'+1)); System.out.println("he11o"+'a'+1); //任何数据类型用+与字符串相连接都会产生新的字符串 System.out.println('a'+1+"hello"); System.out.println("5 + 5 = " + ( 5 + 5 )); } }

运行结果如下
JAVA基础2——进制运算&数据类型&变量
文章图片

Java语言中的字符char可以存储一个中文汉字吗?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节。所以,Java中的字符可以存储一个中文汉字
//char类型是否可以存储中文 char c='中'; System.out.println(c);

    推荐阅读