// 数据类型 : 基本数据类型(8种) + 引用类型(很多)
/1.整数类型:byte short int long
2.浮点类型:float double
3.字符类型:char
4.布尔类型: boolean
原码 补码 反码
正数补码: 原码
负数补码:原码 取反 + 1
/
/******************************************************************************************************/
//二进制补码形式存储
/
*byte : 8位 2^7 - 1 ~ 2^7
*short :16位 2^15 - 1 ~ 2^15 32000+
*int : 32位 2^31 - 1 ~ 2^31 21亿7+
*long :64位 2^63 - 1 ~ 2^63 时间 从1970年开始计算,可以表示到2000+万年后
*从高位到低位为自动类型转换,低到高是强制类型转换,可能会导致精度缺失
*如下
*/
*byte b = 127;
*short s = 128;
*s = b ; //自动类型转换
*b = (byte)s ; // 强制类型转换 -> 只留低8位 ,可能会丢失精度
/************************************************************************************************/
/byte 8 位 1111 1111 首位符号位,实际数字位为后7位
* 最大值为 0111 1111 -> 127
* 0111 1111
* 0111 1110
* 0111 1101
* 0111 1100
* 0111 1001
* 0111 1000
* …
/
/************************************************************************************************/
/
* float: 32位 1位符号位 8位指数位 (-128 ~ 127) 23位尾值数位 2^23位尾数 精确度达到10进制小数点后6~7 位
* double: 64位 1位符号位 11位指数位 52位尾数位 精确度达到10至今小数点后9位左右
*
* 这两种都是存在精度缺失问题的(无法避免除不尽的问题),所以小数不能进行数值相等的判断,可以进行范围的判断
*/
float f = 3.1415926f; //所有的浮点数字面量默认都是double类型
double d = 3.1415926; //默认double转化为float可加f/F
double d1 = 5.0 - 4.9 ;
System.out.print(d1);
d1 = 3.0- 2.9 ;
System.out.print(d1);
/*****************************************************************************************************/
/*
* 字符: char 位数16 不存在符号位 最大值 2^16 - 1 = 65535 ~ 0
* UTF-8(国际编码) GBK(国内编码) 字节- 》 编码 = 字符 翻过来是 解码
*/
char c = '中' ;
c = 65 ; //A ASCII码
c = '\u4e2d'; // 0 ~ 65535 \u0000 ~ \uffff Unicode编码
System.out.println(c);
c = '\uffff' ; //16进制数
int a = 017 ; //8进制 a = 15
System.out.println(a);
a = 0xe; //16进制 a = 14
System.out.println(a);
/*
/*
* boolean类型
*/
boolean b = true;
b = false;
b = 3==1;
/
/**************************************************************************************************/
/*
* 运算符
* …
* 算术运算符 + - * / % ++ –
* 赋值运算符 = =+ =- =* =/
* 逻辑运算符 & | ! && || 结果为true/false
* 比较运算符 > < >= <= == != 结果为true/false
* 位运算符 << >> >>> & | ^ >>>为无符号右移 >> 跟 <<为带符号移位运算
* 三目运算符 ? :
*/
int a = 0 ;
int b = 10;
int c = a ++ + b ;
System.out.println(a);
int d = ++ a + b;
System.out.println(a);
System.out.println(d);
double e = 3.0 / 2 ;
byte bb = 1;
bb += 1 ; //bb = bb + 1(赋值运算符不会改变变量的类型)
int t = 2 & 6; // 0010 & 0110 = 0010
System.out.println(t);
int m = 2 << 1;
System.out.println(m);
int g = -4 >>> 1;
System.out.println(g);
// &和 &&逻辑运算
int o = 10;
int p = 11;
boolean x = o++ > p && p-- < 10;
System.out.println(o); //11
System.out.println(p); // & 10 && 11 (短路现象)
System.out.println(x);
//如果 p >= 10 就1 否则 就0 => if-else
int y = p >= 10 ? 1:0; //问号前是一个布尔类型或者是一个可以计算成布尔类型的式子
System.out.println(y);
/********************************************************************************************************************/