马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 零度非安全 于 2017-1-19 14:38 编辑
【Java 教程(原创)】索引帖
位运算符
整型数据在内存中以二进制的形式表示,比如一个 int 型变量在内存中占 4 个字节,共 32 位。int 型数据 7 的二进制表示为:00000000 00000000 00000000 00000111
左边最高位是符号位,最高位是 0 表示正数,是 1 表示负数。负数采用补码表示,比如 -8 的二进制表示为:11111111 11111111 11111111 11111000
这样就可以对两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据。
1>“按位与”运算符
“按位与”运算符“&”是双目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据对应位都是 1,则 c 的该位是 1,否则是 0。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。
例如: a:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
& b:1 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 0 1 0 1 1
————————————————————————————————————————————————————————————————————————————
c:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
2>“按位或”运算符
“按位或”运算符“|”是二目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据的对应位都是 0,则 c 的该位是 0,否则是 1。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。
3>“按位非”运算符
“按位非”运算符“~”是单目运算符,用于对一个整型数据 a 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a 的对应位是 0,则 c 的该位是 1,否则是 0。
4>“按位异或”运算符
“按位异或”运算符“^”是二目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据的对应位相同,则 c 的该位是 0,否则是 1。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。
由异或运算法则可知:因此,如果 c = a ^ b,那么 a = c ^ b,也就是说,“^”的逆运算仍然是“^”,即 a ^ b ^ b 等于 a。
使用位运算符可以操作逻辑型数据,法则如下:当 a、b 都是 true 时,a & b 是 true,否则 a & b 是 false。
位运算符在操作逻辑型数据时,与逻辑运算符 &&、||、! 不同的是,位运算符要在计算完 a 和 b 之后再给出运算的结果。比如,x 的初值是 1,那么经过下列逻辑比较:((y = 1) == 0) && ((x = 6) == 6);
运算后,x 的值仍然是 1。但是,如果经过下列位运算:((y = 1) == 0) & ((x = 6) == 6);
之后,x 的值将是 6。
在下面这个例子中,利用“异或”运算的性质,对几格字符进行加密并输出密文,然后再解密,运行效果如下所示:
例子代码如下:
Xor.javapublic class Xor{
public static void main(String args[]){
char a1 = '鱼',a2 = 'C',a3 = '论',a4 = '坛';
char secret = 'A';
a1 = (char)(a1 ^ secret);
a2 = (char)(a2 ^ secret);
a3 = (char)(a3 ^ secret);
a4 = (char)(a4 ^ secret);
System.out.println("密文:" + a1 + a2 + a3 + a4);
a1 = (char)(a1 ^ secret);
a2 = (char)(a2 ^ secret);
a3 = (char)(a3 ^ secret);
a4 = (char)(a4 ^ secret);
System.out.println("原文:" + a1 + a2 + a3 + a4);
}
}
instanceof 运算符
instanceof 运算符是二目运算符,左边的操作元是一个对象,右边是一个类。当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是 true,否则是 false。
运算符综述
Java 的表达式就是用运算符连接起来的符合 Java 规则的式子,运算符的优先级决定了表达式中运算执行的先后顺序。例如,x < y && !z 相当于 (x < y) && (!z)。鱼油们没有必要去记忆运算符的优先级别,在编写程序时尽量使用 () 运算符来实现想要的运算次序,以免产生难以阅读或含糊不清的计算顺序。运算符的结合性决定了并列的相同级别运算符的先后顺序,例如,加、减的结合性是从左到右,8 - 5 + 3 相当于 (8 - 5) + 3;逻辑运算符 ! 的结合性是从右到左,! ! x 相当于 ! (! x)。下表是 Java 中所有运算符的优先级和结合性,有些运算符和 C 语言中相同,我在这里整理给各位鱼油们。
优 先 级 | 描 述 | 运 算 符 | 结 合 性 | 1 | 分隔符 | []、()、. 、, 、; | 从右到左 | 2 | 对象归类,自增、自减运算,逻辑非 | instanceof、++、--、! | 从左到右 | 3 | 算术乘、除运算 | *、/、% | 从左到右 | 4 | 算术加、减运算 | +、- | 从左到右 | 5 | 移位运算 | >>、<<、>>> | 从左到右 | 6 | 大小关系运算 | <、<=、>、>= | 从左到右 | 7 | 相等关系运算 | ==、!= | 从左到右 | 8 | 按位与运算 | & | 从左到右 | 9 | 按位异或运算 | ^ | 从左到右 | 10 | 按位或运算 | | | 从左到右 | 11 | 逻辑与运算 | && | 从左到右 | 12 | 逻辑或运算 | || | 从左到右 | 13 | 三目条件运算 | ?、: | 从左到右 | 14 | 赋值运算 | = | 从右到左 |
【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。
|