Java基础语法5 位运算符 三目运算符

java基础语法5

java学习路线Day06

一、位运算符

image.png
示例:

public class WeiOptDemo1 {
    public static void main(String[] args) {
        int a =3;
        int b =4;
        System.out.println(a & b);
        System.out.println(a | b);
        System.out.println(a ^ b);
        System.out.println( ~ b);
    }
}

位运算是直接对二进制进行运算。
计算机中所有的数据运算都是采用补码的形式进行的
这段程序的计算过程如下:
3的原码:00000000 00000000 00000000 00000011 —>3的补码
4的原码:00000000 00000000 00000000 00000100 —>4的补码
位运算
& : 按位计算,有0则0
结果: 00000000 00000000 00000000 00000000 —>0
| :有1则1
结果 : 00000000 00000000 00000000 00000111 —>7
^ : 相同则0,不同则1
结果: 00000000 00000000 00000000 00000111 —>7
~ :1变成0,0变成1
结果: 11111111 11111111 11111111 11111011
此为补码,转成原码:
10000000 00000000 00000000 00000101 —> -5
结果:image.png
注意:&,| , ^ ,这三个既是逻辑运算符,又是位运算符。怎么区分呢?
看符号两边的数据类型,两边都是boolean类型,那就是逻辑运算,计算结果也是boolean类型。两边是数值类型的值,那就是位运算,输出也是数值类型。


除了&,| , ^ 这三个位运算符,还有 <<(左移),>>(右移),>>>(无符号右移) 三个位运算符,示例:

public class WeiOptDemo2 {
    public static void main(String[] args) {
        System.out.println(2<<3);
        System.out.println(24>>3);
        System.out.println(-24>>3);
        System.out.println(-24>>>3);

image.png
计算过程:

左移
2的补码:00000000 00000000 00000000 00000010
左移三位,左边删掉三位,右边空位补0000 )00000000 00000000 00000000 00010 000 —>16
正数右移
24的补码:00000000 00000000 00000000 00011000
右移三位,右边删掉三位,左边空位补符号位上的数字000 00000 00000000 00000000 00000011(000 ) —>3
负数右移
-24的原码:10000000 00000000 00000000 00011000
-24的补码:11111111 11111111 11111111 11101000
右移三位,右边删掉三位,左边空位补符号位上的数字111 11111 11111111 11111111 11111101(000 )转为原码:10000000 00000000 00000000 00000011 —> -3
无符号右移
-24的补码:11111111 11111111 11111111 11101000
右移三位,右边删掉三位,左边不管符号位是啥,统一补0000 11111 11111111 11111111 11111101(000 )原码同补码—>536870909

总结:
<<: 左移,相当于乘以2的多少次幂
>>:右移,相当于除以2的多少次幂

注意:
无符号右移时,操作数为正数,和右移结果相同,操作数为负数,与右移结果不同!

二、三目运算符

语句定义格式:
(关系表达式)?表达式1:表达式2;

如果()内条件为true,运算后的结果是表达式1
如果()内条件为false,运算后的结果是表达式2

示例:

public class SanMuOptDemo1 {
    public static void main(String[] args) {
        //判断两个数最大值
        int a=10;
        long b=5L;
//        int c=(a>b)?a:b;//java: 不兼容的类型: 从long转换到int可能会有损失
        long c=(a>b)?a:b;
        System.out.println(c);//10

注意事项:
1.三目运算符一定是有一个结果值
2.三目运算符表达式中,最终的结果数据类型是由参与运算的最大的数据类型决定的,所以上面的示例结果虽然是10,但不能用int接收。


比较三个数大小:

int a=3;
        int b=4;
        int c=5;
        int d=(a>b)?((a>c)?a:c):((b>c)?b:c);
        System.out.println(d);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值