位运算符和泛型

一.位运算符

  1. 定义

    • 对数值进行二进制的位运算
    • 在位运算中 0 为假, 1为真
  2. 分类

    • & : 有0则为0
    • | : 有1则为1
    • ^ : 相同为0 , 不同为1
    • ~ : 按位取反
    • >> : 有符号右移(次高位改变,即次高位增加一位,不改变符号位,这叫有符号)
    • << : 有符号左移(次高位减少一位)
    • >>> : 无符号右移(最高位改变,即不考虑符号位,这叫做无符号)
  3. 演示

    public static void main(String[] args) {
    	
    	int a = 10; //二进制表现为 1010
    	int b = 5;  //二进制表现为 0101
    	
    	System.out.println(a&b); 
        1010  (105的二进制数进行与运算)
        0101 &(与运算,真假为假,假假为假,真真为真,0为真,1为假)
        0000 (结果都是假,二进制转换为十进制数为0)
    	
    	System.out.println(a|b);
    	(和与运算同理,两个二进制数进行或运算)
        
    	System.out.println(a^b);
    	(同理,两个二进制树进行异或运算,即真真为真,假假为真,真假为假)
        
    	System.out.println(~a);
    	(同理,10的二进制数都取反,但是注意是左右都取反,而二进制数第一位表示符号,所以数的正负号也变了)
        0000 0000 0000 0000 0000 0000 0000 1010
        1111 1111 1111 1111 1111 1111 1111 0101(进行反运算之后)
            
    	System.out.println(a>>1);//右移一位 相当于除以2
    	0000  1010
        00000 101 (相当于10/2,注意5/2=2)
        
    	System.out.println(a<<1);//左移一位,相当于乘以2
        0000 1010
        0000 10100
    	
    	System.out.println(a>>>1);//无符号位移,缺失的首位补0
    	
    }
    
  4. 注意事项

    • 一个数异或同一个数两次,结果还是本身
  5. 测试题

    • 不借助第三个变量的前提下交换两个整数变量的值

      a = a^b;
      b = a^b;//相当于b = a^b^b = a (把第一步的a带进来)
      a = a^b;//与上面同理,一个数异或同一个数两次,结果还是本身;
      

二.泛型

1.把泛型定义在类上
  • 泛型类型必须是引用类型数据,但是定义时泛型名可以是任何符号,具体实现泛型时必须是引用类型.
public class 类名<泛型名>{}
package com.qianfeng.www.day17;

import java.security.spec.RSAOtherPrimeInfo;

public class TestFanxing {

    public static void main(String[] args) {

        perso1<String> stringperso1 = new perso1<>("1");
        System.out.println(stringperso1.time);
    }

}

//类上面加了一个泛型,T只是一个代号
class perso1<T> {

    //这里的T可以当作一个数据类型来定义变量,和定义类时的泛型一致
    T time;
    String name;

    //构造一个有参构造器,通过输入泛型类型的参数来定义上面的泛型型变量;
    public perso1(T time) {
        this.time = time;
    }
}

//代表这个泛型里面只能加入Object类或者它的子类;
class person2<T extends Object>{}
2.把泛型定义在方法上
public <泛型类型> 返回类型 方法名(泛型类型 变量名){}

public <E> E(返回值类型可以是其他东西) mothod(E[] e){}

注意:导包的时候千万不能导错包,不然程序运行不了.

public class TestFanxing2 {

    //泛型限制方法的类型,也可以定义<e extends String>,
    public <e> e prin(e n) {
        return n;
    }

    //这个就相当于上面泛型限制的e为String
    public String prins(String string) {
        return string;
    }

    public static void main(String[] args) {
        TestFanxing2 testFanxing2 = new TestFanxing2();
        System.out.println(testFanxing2.prin(1));
        System.out.println(testFanxing2.prin("nihao"));

        //我们只能往list里面添加;integer或者他的父类
        List<? super Integer> list = new ArrayList<>();
    }
}
3.通配符<?>
  • 如果没有规定类型,就可以是Java中的任意类.
  • <? extends 父类> (代表泛型只能填该父类和他的子类).
  • <? super 子类> (代表泛型只能填他的该子类和他的父亲)(只能在集合等中用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值