昨天文章中的字符型char,众所周知数和数能相加减,而我下方的代码段中给字符'c'加上了1,并没有报错,这就是数据类型中的转换,而在数据类型中只有布尔类型不能转换;c可以加1的原因是计算机把c用ASKII码转换为了数字97,c+1=98;(ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。)在(c+1)的前面加(char),这样的形式为强制类型转换,(c+1)=98,我们查ASKII码中98表示b,运行后结果为b,验证正确。
第四行代码中的强制类型转换为将整型数字129强制转换为比特型,这里就有个问题, 129转换为比特型会出现负数,数据会出现溢出。
char c='a';
System.out.println(c+1); //ASKII码转换为数字,再加1
System.out.println((char)(c+1));
System.out.println((byte)129); //-127
数据类型转换:
自动数据类型(隐式数据类型):小空间自动转换为大空间,反之不行。
;
强制数据类型(显示数据类型):强制转换就是用圆括号括起你要转换成的目的数据类型。
以下代码段,e是比特型4个字节,在写e=d时,系统会体现错误,在其前加上强制类型转换,可以通过编译。把e赋值给1,可直接输出1。
byte e;
int d=1; //变量
e=(byte)d;
e=1; //值
System.out.println(e);
运算符补充:
自增、自减 :
++a:a在参与其他操作前先将自己加1;
a++:先用原来的值参与其他操作后,再将自己加1;自减与其相同。
口诀:++在前,先运算后赋值;++在后,先赋值后运算。
int m=8;
m=m++;
System.out.println(m);
//8
int n=8;
n=++n;
System.out.println(n);
//9
int a=6;
for(int i=0;i<100;i++) {
a=a++;
} //a依旧得6
int a=6;
int b=++a+ ++a;
System.out.println(b); //得15
int o=6;
int p=o++ + ++o;
System.out.println(p); //得14
练习例子1:
int o=6;
int p=++o+--o/2%--o;
System.out.println(p);//得10
短位运算:
int a=1;
boolean b=a++<0 && a--<2;
System.out.println(b);
System.out.println(a); //a此时为2,因为与运算左边为假(左边结果已定)a只运算到a++
int a=1;
boolean b=a++>0 || a--<2;
System.out.println(b); //true
System.out.println(a); //a此时为2,或运算有一个为真即为真
练习例子2:
int a=2;
a%=3*--a;
a=a%(3*--a);
System.out.println(a); //得2
运算符优先级:
运算符 | 优先级 |
++、-- | 高 |
! | |
*、/、% | |
+、- | |
>、>=、<、<= | |
==、!= | |
& | |
| | |
&& | |
|| | |
=、+=、-=、*=、/= | 低 |
一目 > 二目 > 三目。
如何用程序证明浮点数为什么不精确?
我们先看下面对代码段,发现a-b在我们正常算数中得数为55.233,而计算机算出为55.233000000000004,为什么会后面多出一个4呢
double a=155.333;
double b=100.10;
//55.233 PC:55.233000000000004
System.out.println(a-b);
末尾问题待解决。
202103031704-------------------------(未完待续)