关于进制
- 所有数字在计算机底层都以二进制形式存在。
- 对于整数,有四种表示方式:
- 二进制:0,1,满2进1,以0b或0B开头。
- 十进制:0-9,满10进1.
- 八进制:0-7,满8进1,以数字0开头表示。
- 十六进制:0-9及A-F,满16进1,以0x或0X开头。此处的A-F不区分大小写。
二进制
- Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位。
- 二进制的整数有如下三种形式:
- 原数:直接将一个数值换成二进制数,最高位是符号位。
- 负数的反码:是对远吗按位取反,只是最高位(符号位)确定为1.
- 负数的补码:其反码加1。
- 计算机以二进制补码的形式保存所有的整数。
- 正数的原码。反码、补码都相同。
- 负数的补码是其反码+1。
- 为什么要使用原码、反码、补码表示形式呢? 计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法,我们知道,根据运算法则减去一个正数等于加上一个负数,集:1-1=1+(-1) = 0,所以及其可以只有加法而没有减法,这样计算机运算的设计就更简单了。
进制的基本转换
- 十进制 二进制互换
- 二进制转成十进制 乘以2的幂数
- 十进制转成二进制 除以2取余数
- 二进制 八进制互转
- 二进制 十六进制互转
- 十进制 八进制互转
- 十进制 十六进制互转
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
- 算术运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
算术运算符的注意问题
- 如果对负数取模,可以把魔术负号忽略不计。如:5%-2=1。但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
- 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
- “+”除字符串相加功能外,还能把非字符串转换成字符串。例如“5+5=”+5+5的结果时5+5=55。
赋值运算符
- 符号:=
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
- 支持连续赋值。
- 扩展赋值运算符:+=, -=, *=, /=, %=
逻辑运算符
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3&x<6。
- “&”和“&&”的区别:
- 单&时,左边无论真假,右边都进行运算;
- 双&&时,如果坐标为真,右边参与运算,如果坐标为假,那么右边不参与运算。
- “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
- 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。理解:异或,追求的是“异”!
位运算符
| 运算符 | 运算 | 描述 | 范例 |
|---|---|---|---|
| << | 左移 | 空位补0,被益处的高位丢弃,空缺位补0 | 3 << 2 = 12 |
| >> | 右移 | 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 | 3 >> 2 = 0 |
| >>> | 无符号右移 | 被移位二进制最高位无论是0或者是1,空缺位都用0补 | 3 >>> 1 = 1 |
| & | 与 | 二进制位进行&运算,只有1&1时结果是1,否则是0; | 6 & 3 =2 |
| | | 或 | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; | 6 | 3 =7 |
| 异或 | 相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0;不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1 | 6 ^ 3 = 5 | |
| ~ | 取反 | 正数取反,各二进制码按补码各位取反,负数取反,各二进制码按补码各位取反, | ~6 = -7 |
- 位运算是直接对整数的二进制进行的运算。
三云运算符
- 格式:
- 表达式1与表达式2为同种类型;
- 三元运算符与if-else的了联系和区别:
- 三元运算符可简化if-else语句;
- 三元运算符要求必须返回一个结果。
- if后的代码块可有多个语句。
运算符的优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总是优于下一行。
- 只有单目运算符、三云运算符、赋值运算符是从右向左运算的。