键盘输入语句和位运算

键盘输入语句

介绍:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。需要一个 扫描器(对象), 就是Scanner
注意:
(1)导入该类的所在包, java.util.*
(2)创建该类对象(声明变量)
(3)调用里面的功能

案例:可以从控制台接收用户信息,【姓名,年龄,薪水】

import java.util.*;//键盘输入需要导入的包

public class Case3 {
	public static void main(String[] args) {
		// 新建类对象 myScanner 就是 Scanner 类的对象
		Scanner myScanner = new Scanner(System.in);
		// 3. 接收用户输入了, 使用 相关的方法
		System.out.println("请输入名字:");
		// 接收用户输入字符串
		String name = myScanner.next();
		System.out.println("请输入年龄:");
		// 接收用户输入 int
		int age = myScanner.nextInt(); 
		System.out.println("请输入薪水:");
		// 接收用户输入 double
		double sal = myScanner.nextDouble(); 
		System.out.println("人的信息如下:");
		System.out.println("名字=" + name + " 年龄=" + age + " 薪水=" + sal);
	}
}

在这里插入图片描述

进制介绍

对于整数,有四种表示方式:
二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
十进制:0-9 ,满 10 进 1。
八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。

案例:输出 二,十,八,十六进制的数据

public class Case4 {
	public static void main(String[] args) {
		// n1 二进制
		int n1 = 0b1010;
		// n2 十进制
		int n2 = 1010;
		// n3 八进制
		int n3 = 01010;
		// n4 十六进制
		int n4 = 0X10101;
		System.out.println("n1=" + n1);
		System.out.println("n2=" + n2);
		System.out.println("n3=" + n3);
		System.out.println("n4=" + n4);
		System.out.println(0x23A);
	}
}

在这里插入图片描述

进制开头
二进制0b
八进制0
十六进制0x

位运算

原码、反码、补码

  1. 二进制的最高位是符号位:0表示正数, 1表示负数。
  2. 正数的原码,反码,补码都一样。
  3. 负数的反码 = 它的原码符号位不变,其它位取反(0->1,1->0)
  4. 负数的补码 = 它的反码 +1,负数的反码 = 负数的补码 -1
  5. 0的反码,补码都是0。
  6. java 没有无符号数,换言之,java中的数都是有符号的。
  7. 在计算机运算的时候,都是以补码的方式来运算的。
  8. 当我们看运算结果的时候,要看他的原码。
    计算机看补码,人看源码

位运算符

java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)

分别是按位与&、按位或|、按位异或^、按位取反~,
它们的运算规则是:
按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或|^∶两位一个为0,一个为1,结果为1,否则为0
按位取反~:0->1,1->0

还有 3 个位运算符 >>、<< 和 >>> , 运算规则:
(1) 算术右移 >>: 低位溢出,符号位不变,并用符号位补溢出的高位
(2) 算术左移 <<: 符号位不变,低位补 0
(3) >>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
(4) 特别说明:没有 <<< 符号

应用案例

int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 =0
int c=1<<2; //1 => 00000001 => 00000100 本质 1 * 2 * 2 = 4

位运算的思考题

1. 请看下面的代码段,回答 a,b,c,d,e 结果是多少?

public static void main(String []args)
{
int a=1>>2; // 1 向右位移 2 位
/* 这里就按一个直接推(int型一般是4个字节)
0000 0001 右移动2位,溢出的不要并用符号位补,
所以得到 0000 0000 (补码) 0的源码和补码一样,
即输出 0
*/
int b=-1>>2;//算术右移
/* 原 1000 0001 反 1111 1110 负数的补码 = 它的反码 +1;
补 1111 1111 右移动2位,溢出的不要并用符号位补, 
得 1111 1111(补码)负数的反码 = 负数的补码 -1,
1000 0000(反),源码1000 0001 ,即输出 -1
*/
int c=1<<2;//算术左移
int d=-1<<2;//
int e=3>>>2;//无符号右移
//a,b,c,d,e 结果是多少
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("e="+e);
}

在这里插入图片描述

2. 请回答在 java 中,下面的表达式运算的结果是: (位操作)

~2=? // 按位取反
2&3=?// 2 按位与 3
2 ^ 3=? //^ 按位异或
~-5=?
13 & 7=?
5 | 4=?
-3 | 3=?
public class Case6 {
	public static void main(String[] args) {
		int a = ~2;// 按位取反
		//补 0000 0010 取反 1111 1101(补)
		//负数的反码 = 负数的补码 -1
		//1111 1100(反) 源码 1000 0011,即 -3
		int b = 2 & 3;// 2 按位与 3
		// 2 的补码 0000 0010 
		// 3 的补码 0000 0011  按位与&:两位全为1,结果为1,否则为0
		//         0000 0010,即 2
		int c = 2 ^ 3;// ^ 按位异或
		// 2 的补码 0000 0010 
		// 3 的补码 0000 0011  按位或^:两位有一个为1,结果为1,否则为0
		//         0000 0011,即 3
		int d = ~-5;
		int e = 13 & 7;
		int f = 5 | 4;
		//按位或|:两位有一个为1,结果为1,否则为0
		// 5 补码 0000 0101
		// 4 补码 0000 0100
		//        0000 0101 即 5
		int g = -3 | 3;
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		System.out.println("c=" + c);
		System.out.println("d=" + d);
		System.out.println("e=" + e);
		System.out.println("f=" + f);
		System.out.println("g=" + g);
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值