一,进制
十进制:由0~9的数字组成,遵循锋十进一。
二进制:由0,1组成,遵循逢二进一。
八进制:(很少使用)由0~7组成,逢八进一。
十六进制: (程序中还是会使用的)由0~9,A~F,组成,遵循逢十六进一。
十进制转二进制,除2倒取余(余数)
二进制小数转换十进制 乘二取整
二进制转十进制,由1的二进制位权 累加起来
平时的话 计算机中由程序员模式 可以快速转换
二,Java程序中表示莫格数字的进制
~十进制:正常表示
~二进制:在数字的前面加0B或0b
~八进制:在数字的签名加0
十六进制:在数字的前面加0X或0x
三,计算机的存储单位
计算机中最小的存储单位是bit(比特),一个比特是1个二进制位,只能表示0或1。
计算机最基本的存储单位是byte(字节),一个字节是8位。
如果不考虑符号位的问题(不考虑正负数的问题):0~255。
四,符号位以及原码反码补码问题
数字有正负数。在计算机中如何表示一个数字是正数还是负数?
规定这个数的二进制的最高位是符号位,符号位为0是正,符号位为1是负数。
最左边==最高位
1001 1001 == -25
0001 1001 == +25
~正数的:原码反码补码 没有区别,都一样
-
原码:例如:25的原码00011001
-
反码:例如:25的反码00011001
-
补码:例如:25的补码00011001
~负数:例如-25
原码:把负数的绝对值的十进制转换为二进制后,最高位设置为1,-25的原码
1001 1001
反码:在原码的基础上,符号位不变,其余位取反,0变1,1变0,-25的反码
1110 0110
补码:早反码的基础上加1,
1110 0111
四,整数存储
各种整数占用内存宽度
byte :1个字节
short : 2个字节
int : 4个字节
long :8个字节
1个字节可以表示的整数值范围是:-128 ~127
五,char类型的存储
在Java中,若有的JVM都给char类型分配两个字节。而且char类型的2个字节不考虑符号位,全部都是正数。那么2个字节可以表示的范围是0~65535,也就是说,Java中一共可以表示65535个字符。这些字符被搜集在一个Unicde字符集中,每个字符对应一个整数值,这个整数值被称为字符编码。
最早的时候,计算机只能表示128个字符,这些字符搜集在ASCLL码表中,Unicde字符集包含ASCLL表。
常用的字符编码值:
在程序中表示一个字符
字符本身表示,列如:char aChar = 'a';(最常用)
十进制编码值表示,列如: char aLetter = 97;
十六进制编码值表示,要求\u开头,后面4位十六进制值,列如:char aCode = '\uoo61';(很少用)
部分特殊字符需要用到第四种方式,转义字符
\ n:换行
\b:退格(Backspce)
\r:回车,结束本行,光标回到首行
\t:tab
\ \:表示斜杠本身
\':表示单引号
\":表示双引号
六,小数存储类型
float 类型>long 类型
float类型和double类型是浮点型,不精确。
应为十进制转二进制,很可能出现截断等情况,二进制可能需要补位等。
double类型除了数据范围比float类型大,精度也比float类型大,即可以表示到小数点后面的位数比float类型多。float类型大约精度是7-8位,double类型大约精度是15-16位
七,Boolean类型的存储
Boolean 类型的值只有两种:true 和 false,虽然Java在程序中不能给Boolean类型的变量赋其他值,但在底层true个false却使用正数表示的。1表示true 0表示false。
Boolean的变量只需要分配1位(1个bit位)就够了。
八,八种数据类型的大小比较顺序
< char
byte (1个字节) < short(2个字节)< int(4个字节) < long(8个字节) < float (4个字节)< double(8个字节)
boolean(不参与比较)
九,数据类型的转换问题
自动类型转换
1.当把存储范围小的(占用内存少的)赋值给存储范围大的(占用内存多的)变量时,就可以自动类型提升。
2.当多种数据类型的值在一起混合运算时,它们最终的结果会自动提升为他们中最大的。
3.当byte与byte,short与short,char与char,或者他们3个之间的运算,他们的结果会自动升级位int。(特殊)
4.boolean不参与他们的转换
强制类型转换
~当把存储范围大的(占用内存多的)赋值给存储范围大小(占用内存少的 )变量时,就必须强制类型转换。
注意:强制类型转换可能会出现溢出或损失值,精度。
十,字符串的拼接
在Java中把字符串特殊化了,给字符串提供了一个运算符“+”,作用是拼接。
所有类型的值,一旦与字符串进行“+”,结果就都变成了 字符串。
十一,算术运算符
1.+
·拼接:只要+左右两边又一边出现字符串,就是拼接,结果也是字符串。
·求和:当+左右两边不是字符串的时候,就是求和,稍稍主要的时Byte+Byte,short+short,char+char的类型都是提升问题。
·表示正号:当+作为一元运算符(又称单目运算符)
2,-
~相减
~表示负数:当-作为一元运算符
3,/
·整数/整数,结果仍然是整数,去掉小数部分
·整数。整数,除数不为0,报错算数异常
·小数相除,除数为0 不会报错,得到结果Infinity
·区别:转移是\除法是/,不要看错
负负得正
4,*
*代表除法,没什么特别的。
5,%
取余,又称取模。
遵循余数的正负号 与被除数保持一致。
6,++
++称为自增,自增是一元运算符,需要说明谁来自增,需要一个变量。列如:a++,或++a。
如果自增运算是独立的运算,即自增表达式独立成一个语句,那么自增在前在后都一样,自增变量+1.
如果自增运算只能算作语句的一部分时,那么++在前和在后是不同的
~++在前,需要先对自增变量加1 ,然后取自增变量的值参与其他运算
~++在后,先去自增变量的值,先放一边,然后对自增变量加1。
7,--
同理++
十二,比较运算符和关系运算符
逻辑与:&
true & true 才 为 true
其他为 false
短路与:&&
同上但当&&的左边为false时,右边就不看了,直接结果是false
逻辑或 |
false | false 为 false
其他为True
断路或 ||
有true为true,FF为false。
当||的左边为true时,右边就不看了,直接结果是true。
逻辑异或:^
TF为true,其余都是false。
十三,条件运算符
Java中条件运算符只有1个,又被称为三元运算符。
因为它需要三个表达式或3个值,才能组成一个条件运算符表达式。
条件表达式 ? 结果表达式1 : 结果表达式2
当条件表达式的结果为true时,整个表达式取 结果表达式1 的值,否则就取 结果表达式2 的值。