目录
- 1.题目
- 分析:
- 2.思考题
- 3.题目:
- 4.题目:
- 求X的反码和补码
- 计算反码
- 计算补码
- 计算2乘以8的结果
- 实现两个整数变量的交换
- 异或运算符(^)的特点
1.题目
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
分析:
行代码试图将两个整数常量相加的结果赋值给变量 b。这里存在两个问题:
首先,b 没有明确指定类型。根据Java的语法,变量在使用前必须声明其类型。
其次,即使 b 被声明为 byte 类型,3 + 4 的结果为7,这个值在 byte 类型的范围内,因此理论上可以赋值,但前提是变量 b 必须先被声明。
2.思考题
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
练习:byte b = 300;
3.题目:
Java中字符可以存储一个汉字吗?
可以。因为Java语言采用的是unicode编码,
而unicode编码的每个字符是两个字节,
所以,java中的字符可以存储一个汉字。
注意:
整数默认是int类型
浮点数默认是double类型
long类型的变量,要加l或者L。
float类型的变量,要加f或者F。
在同一对{}里面,是不能有同名的变量。
第一题:
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
请分别计算出a,b,c的值
第二题:
int a = 4;
int b = (a++)+(++a)+(a*10);
4+6+60=70
//int i = 1;
//System.out.println(i+++i+++i+++i++);
//i++ + i++ + i++ + i++
//1 + 2 + 3 + 4int i = 1;
System.out.println(i++ + ++i + i++ + ++i);//1+3+3+5
//i++ + ++i + i++ + ++i
//1 + 3 + 3 + 5
4.题目:
short s=1, s = s+1;
short s=1, s+=1;
上面两个代码有没有问题,如果有,那里有问题
第一个代码片段 short s=1; s = s+1;
在这一行代码中,s+1的运算结果会被自动提升为int类型(这是Java中类型提升规则的一部分)。然后尝试将这个int类型的值赋给short类型的变量s,这会导致一个编译错误,因为从int到short的转换需要显式的类型转换。编译器不允许这种自动的窄化转换,因为它可能会导致数据丢失。
&&和&的区别? 前者有短路效果,只要左边是false,右边不执行。而后者,全部执行。
||和|的区别? 前者有短路效果,只要左边是true,右边不执行。而后者,全部执行。
++,–
A:单独使用
放在数据的前面和后面效果一样。
B:参与操作使用
放在数据的前面,先数据变化,再参与运算。
放在数据的后面,先参与运算,再数据变化。
已知某数X的原码为0b 10110100,试求X的反码和补码。
求X的反码和补码
已知X的原码为
10110100
,首先需要注意的是这是一个8位二进制数,其中最高位(第一位从左向右)是符号位,1
表示这是一个负数。计算反码
对于一个负数的二进制数,其反码的计算方法是将除了符号位之外的所有位进行取反,即
0
变1
,1
变0
。
- 原码:
10110100
- 反码计算: 取除符号位外的位的反码
- 反码:
11001011
计算补码
补码的计算方法是在反码的基础上,对最低位加
1
。
- 反码:
11001011
- 补码计算: 最低位加
1
- 补码:
11001100
因此,X的反码是
11001011
,补码是11001100
。
已知某数X的补码0b 11101110,试求其原码。
已知一个数的补码为
11101110
,我们可以按照以下步骤求出其原码:
识别符号位:补码的第一位是1,这表明这个数是负数。
求反码:11101101
求原码:10010010
计算2乘以8的结果
使用位运算可以非常高效地计算2乘以8的结果,因为乘以2的幂次方可以通过位左移实现。
int result = 2 << 3; // 2 << 3 相当于 2 * 2^3 = 2 * 8 = 16
实现两个整数变量的交换
在Java中,可以使用异或运算来高效地交换两个整数变量,无需额外的临时变量。
int a = 5;
int b = 10;
// 交换 a 和 b
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a: " + a + ", b: " + b); // 输出:a: 10, b: 5
异或运算符(^)的特点
异或运算符在二进制位中工作,其特点包括:
- 自反性:任何数与0做异或运算,结果仍然是原来的数。
- 非自反性:任何数和自身做异或运算,结果是0。
- 交换律和结合律:异或运算满足交换律和结合律,即
a ^ b = b ^ a
,(a ^ b) ^ c = a ^ (b ^ c)
。 - 用于数据校验:异或可以用于数据校验,如奇偶校验位的计算。
- 用于加密:异或在一些简单的加密算法中被使用,如一次一密(One-time pad)加密。
在上述的变量交换中,异或运算的这些特点被巧妙利用,使得交换操作既高效又节省空间。