JAVA基础补充(0)-负数右移运算测试

合集下载

java左移和右移的运算规则

java左移和右移的运算规则

java左移和右移的运算规则在Java中,左移和右移是位运算符,用于将一个数的二进制位向左或向右移动特定的位数。

运算结果是将数值的二进制位进行移动,移动后的空位用0或符号位进行填充。

下面是关于Java中左移和右移运算的规则的详细解释。

1.左移运算符(<<):左移的规则如下:-对于左移n位的操作,将原始数值转换为二进制形式。

-向左移动n位,并在右侧用0进行填充。

- 如果左移的位数超过了数据类型的位数(例如,对于int类型的数据,左移的位数超过了32位),则左移的结果是未定义的。

左移运算符的示例代码:```javaSystem.out.println(result);```输出:```20```2.右移运算符(>>):右移运算符将一个数的二进制位向右移动指定的位数。

每个位的值向右移动并丢弃右侧的位,左侧使用符号位进行填充。

如果原始数是正数,则右移的结果和除以2的n次幂相同。

如果原始数是负数,则右移的结果不同于除以2的n次幂。

右移的规则如下:-对于右移n位的操作,将原始数值转换为二进制形式。

-向右移动n位,并在左侧用符号位进行填充。

-如果原始数是正数,则右移的结果和除以2的n次幂相同。

-如果原始数是负数,则右移的结果不同于除以2的n次幂,因为使用符号位进行填充。

右移运算符的示例代码:```javaSystem.out.println(result);```输出:``````无符号右移运算符将一个数的二进制位向右移动指定的位数,丢弃右侧位并使用0进行填充。

无符号右移运算符不管原始数的符号,始终在左侧使用0填充。

无符号右移的规则如下:-对于无符号右移n位的操作,将原始数值转换为二进制形式。

-向右移动n位,并在左侧用0进行填充。

-无符号右移操作不管原始数的符号,始终在左侧使用0进行填充。

无符号右移运算符的示例代码:```javaSystem.out.println(result);```输出:```29```左移和右移运算是Java中非常有用的位运算符,可以进行高效的位操作和数值计算。

java中的自增(++)和自减(--)运算符

java中的自增(++)和自减(--)运算符

有些运算符在JAVA语言中存在着,但是在实际开发中我们或许很少用到它们,在面试题中却时常出现它们的身影,对于这些运算符的含义和用法,你是否还记得呢?自增(++)和自减(--)运算符我们先来回答几个问题吧:Java代码1.int i = 0;2.int j = i++;3.int k = --i;这段代码运行后,i等于多少?j等于多少?k等于多少?太简单了?好,继续:Java代码1.int i = 0;2.int j = i++ + ++i;3.int k = --i + i--;代码执行后i、j、k分别等于多少呢?还是很简单?好,再继续:Java代码1.int i=0;2.System.out.println(i++);这段代码运行后输出结果是什么?0?1?Java代码1.float f=0.1F;2.f++;3.double d=0.1D;4.d++;5.char c='a';6.c++;上面这段代码可以编译通过吗?为什么?如果你能顺利回答到这里,说明你对自增和自减运算符的掌握已经很好了。

为了分析出上面提出的几个问题,我们首先来回顾一下相关知识:∙自增(++):将变量的值加1,分前缀式(如++i)和后缀式(如i++)。

前缀式是先加1再使用;后缀式是先使用再加1。

∙自减(--):将变量的值减1,分前缀式(如--i)和后缀式(如i--)。

前缀式是先减1再使用;后缀式是先使用再减1。

在第一个例子中,int j=i++;是后缀式,因此i的值先被赋予j,然后再自增1,所以这行代码运行后,i=1、j=0;而int k=--i;是前缀式,因此i先自减1,然后再将它的值赋予k,因此这行代码运行后,i=0、k=0。

在第二个例子中,对于int j=i++ + ++i;,首先运行i++,i的值0被用于加运算(+),之后i自增值变为1,然后运行++i,i先自增变为2,之后被用于加运算,最后将i两次的值相加的结果1+2=3赋给j,因此这行代码运行完毕后i=2、j=2;对于int k=--i + i--;用一样的思路分析,具体过程在此不再赘述,结果应该是i=0、k=2。

java运算符选择判断练习题附加答案解析

java运算符选择判断练习题附加答案解析

Java 运算符选择判断练习题附加答案解析一、选择题1.下列哪个选项是Java中的算术运算符?A. ‘&&’B. ‘==‘C. ‘%’D. ‘!=‘答案:C解析:‘&&’ 是逻辑与运算符,’==‘ 是比较运算符,’!=‘ 是不等运算符,’%’ 是取模运算符,用于获取两个数相除的余数。

2.以下代码的输出是什么?int a = 10;int b = 5;System.out.println(a /b);A. 2B. 2.0C. 5D. 0答案:A解析:‘a’ 和‘b’ 都是整数类型,’10 /5’ 的结果是整数2,而不是浮点数。

3.以下代码片段的输出是什么?int x = 5;x += 3;System.out.println(x);A. 5B. 3C. 8D. 15答案:C解析:‘x += 3’ 相当于‘x = x + 3’,所以‘x’ 最终的值是8。

4.哪个运算符用于比较两个值是否相等?A. ‘=‘B. ‘==‘C. ‘!=‘D. ‘=‘答案:B解析:‘==‘ 是比较运算符,用于比较两个值是否相等。

’=‘ 是赋值运算符,’!=‘ 是不等于运算符,’=‘ 是小于等于运算符。

5.下面哪种运算符属于位运算符?A. ‘+’B. ‘&&’C. ‘ | ‘D. ‘=‘答案:C解析:‘|‘ 是位或运算符,’+’ 是加法运算符,’&&’ 是逻辑与运算符,’=‘ 是大于等于运算符。

6.以下代码的输出是什么?int a = 6;int b = 4;System.out.println(a % b);A. 2B. 1C. 0D. 4答案:A解析:‘6 % 4’ 的结果是2,因为6 除以4 的余数是2。

7.以下代码的输出是什么?int a = 5;int b = a++;System.out.println(b);A. 5B. 6C. 4D. 0答案:A解析:‘a++’ 是后缀自增运算符,先使用‘a’ 的值然后再自增,所以‘b’ 的值是5。

java位运算符练习题

java位运算符练习题

java位运算符练习题一、基本位运算符练习1. 将整数a与b进行按位与操作。

2. 将整数a与b进行按位或操作。

3. 将整数a与b进行按位异或操作。

4. 对整数a进行取反操作。

5. 将整数a左移n位。

6. 将整数a右移n位。

7. 将整数a无符号右移n位。

二、位运算符应用练习1. 判断整数a是否为奇数。

2. 判断整数a是否为2的幂次方。

3. 不使用乘法运算符,计算整数a乘以2的结果。

4. 不使用除法运算符,计算整数a除以2的结果。

5. 不使用加法运算符,计算整数a加上b的结果。

6. 不使用减法运算符,计算整数a减去b的结果。

7. 不使用比较运算符,判断整数a是否大于b。

三、位运算符综合练习1. 编写一个方法,实现两个整数的加法运算(不使用加法运算符)。

2. 编写一个方法,实现两个整数的减法运算(不使用减法运算符)。

3. 编写一个方法,判断一个整数是否为4的倍数(不使用除法运算符)。

4. 编写一个方法,交换两个整数的值(不使用临时变量)。

5. 编写一个方法,计算整数的二进制表示中1的个数。

6. 编写一个方法,找出整数的二进制表示中最右侧的1。

7. 编写一个方法,实现整数的乘法运算(不使用乘法运算符)。

四、位运算符趣味练习1. 将一个整数的二进制表示进行翻转。

2. 计算两个整数的二进制表示中不同位的个数。

3. 编写一个方法,将整数的二进制表示中的奇数位和偶数位交换。

4. 编写一个方法,找出整数的二进制表示中最长的连续0的个数。

5. 编写一个方法,将整数的二进制表示中最右侧的n位设置为1。

6. 编写一个方法,计算整数的二进制表示中0和1的个数之差。

7. 编写一个方法,判断两个整数的二进制表示是否互为反码。

五、位运算符进阶练习1. 编写一个方法,使用位运算符实现整数的绝对值计算。

2. 编写一个方法,使用位运算符交换两个整数的符号。

3. 编写一个方法,使用位运算符判断两个整数是否同号。

4. 编写一个方法,使用位运算符计算整数的平方(不使用乘法运算符)。

Java面试题集锦Java中的位运算

Java面试题集锦Java中的位运算

Java面试题集锦Java中的位运算Java面试题集锦Java中的位运算位运算是指对二进制数进行操作的运算。

Java语言中提供了多种位运算符,包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)等。

位运算在Java中常被应用于位操作、加密算法和性能优化等领域。

下面将介绍Java中的常见位运算以及它们的应用。

一、按位与(&)按位与运算符(&)的作用是对两个整数的二进制表示进行“与”操作,只有当两个对应位的值都为1时,结果才为1,否则为0。

二、按位或(|)按位或运算符(|)的作用是对两个整数的二进制表示进行“或”操作,只要两个对应位的值有一个为1,结果就为1,否则为0。

三、按位异或(^)按位异或运算符(^)的作用是对两个整数的二进制表示进行“异或”操作,即只有当两个对应位的值不同,结果才为1,否则为0。

四、取反(~)取反运算符(~)的作用是将一个整数的二进制码的每一位取反,即1变为0,0变为1。

五、左移(<<)左移运算符(<<)将一个整数的二进制码向左移动指定的位数,被左移的位将被丢弃,右边空出的位用0填充。

六、右移(>>)右移运算符(>>)将一个整数的二进制码向右移动指定的位数,被右移的位将被丢弃,左边空出的位用符号位填充。

七、无符号右移(>>>)无符号右移运算符(>>>)与右移运算符(>>)类似,但是无论符号位是0还是1,都用0来填充左边空出的位。

位运算在Java中的应用非常广泛,以下是几个常见的应用场景:1. 位运算与逻辑运算的组合使用位运算与逻辑运算可以组合使用,以实现一些特定的功能。

比如通过与运算和右移运算可以取出一个整数的某几位,并得到相应的值。

2. 判断奇偶性利用按位与运算符(&)的特性,可以判断一个整数的奇偶性。

java 负数 右移位运算

java 负数 右移位运算

java 负数右移位运算Java中的右移位运算是一种位运算操作,用于将一个数的二进制表示向右移动指定的位数。

对于正数来说,右移位运算是一种简单的操作,但对于负数来说,右移位运算可能会导致一些意想不到的结果。

在Java中,整数的二进制表示采用补码形式。

正数的补码和原码相同,而负数的补码是将其对应的正数的补码按位取反,然后再加1。

这就意味着负数的二进制表示最高位是1,而正数的二进制表示最高位是0。

在进行右移位运算时,Java采用的是算术右移。

算术右移是指将一个数的二进制表示向右移动指定的位数,并且将最高位(符号位)的值保持不变。

也就是说,如果最高位是0,则在移位过程中在最高位补0;如果最高位是1,则在移位过程中在最高位补1。

对于正数来说,算术右移的结果是符合预期的。

例如,对于十进制数5(二进制表示为00000101),右移1位后得到十进制数2(二进制表示为00000010),右移2位后得到十进制数1(二进制表示为00000001)。

然而,对于负数来说,算术右移可能会导致一些问题。

这是因为负数的二进制表示最高位是1,而在算术右移过程中会在最高位补1。

这样就会导致右移后的结果仍然是一个负数。

例如,对于十进制数-5(二进制表示为11111011),右移1位后得到十进制数-3(二进制表示为11111101),右移2位后得到十进制数-2(二进制表示为11111110)。

这种情况下,负数的右移位运算结果可能会导致一些意想不到的结果。

比如,右移一位后得到的结果不是-2而是-3。

这是因为在进行右移位运算时,最高位的1会向右移动,而右移后的结果仍然是一个负数,所以最高位的1会被保留下来,导致结果变成了-3。

这种情况下,我们可以使用无符号右移位运算来解决这个问题。

无符号右移位运算是指将一个数的二进制表示向右移动指定的位数,并且在最高位补0。

这样就可以保证右移后的结果是一个正数,而不是负数。

在Java中,使用无符号右移位运算可以通过将右移运算符(>>)替换为无符号右移运算符(>>>)来实现。

java运算符题

java运算符题

在Java中,运算符是用于执行算术运算、比较运算、逻辑运算等操作的符号。

下面是一些常见的Java运算符的示例:1.算术运算符:o加法运算符(+):a + bo减法运算符(-):a - bo乘法运算符(*):a * bo除法运算符(/):a / bo取模运算符(%):a % bo自增运算符(++):a++o自减运算符(--):a--2.比较运算符:o大于运算符(>):a > bo小于运算符(<):a < bo大于等于运算符(>=):a >= bo小于等于运算符(<=):a <= bo等于运算符(==):a == bo不等于运算符(!=):a != b3.逻辑运算符:o与运算符(&&):a && bo或运算符(||):a || bo非运算符(!):!a4.位运算符:o位与运算符(&):a & bo位或运算符(|):a | bo位异或运算符(^):a ^ bo位非运算符(~):~ao左移运算符(<<):a << bo右移运算符(>>):a >> bo无符号右移运算符(>>>):a >>> b5.赋值运算符:o赋值运算符(=):a = bo加等赋值运算符(+=):a += bo减等赋值运算符(-=):a -= bo乘等赋值运算符(*=):a *= bo除等赋值运算符(/=):a /= bo取模等赋值运算符(%=):a %= bo自增等赋值运算符(++=):a++=b或a+=1 o自减等赋值运算符(--=):a--=b或a-=1。

Java中与、或、^异或、《左移位、》右移位

Java中与、或、^异或、《左移位、》右移位

Java中与、或、^异或、《左移位、》右移位 1public static void main(String[] args) {2/*3 * &:与运算4 * 全为1则为1,否则为05*/6 System.out.print(1 & 0);7 System.out.print("--");8 System.out.print(1 & 1);9 System.out.print("--");10 System.out.println(0 & 0);11// out:0--1--01213/*14 * |:或运算15 * 全为0则为0,否则为116*/17 System.out.print(1 | 0);18 System.out.print("--");19 System.out.print(1 | 1);20 System.out.print("--");21 System.out.println(0 | 0);22// out:1--1--02324/*25 * ^:异或运算26 * 相同为0,不同为127*/28 System.out.print(1 ^ 0);29 System.out.print("--");30 System.out.print(1 ^ 1);31 System.out.print("--");32 System.out.println(0 ^ 0);33// out:1--0--034 }关于'<<'与'>>'操作:m<<n,表⽰m⼆进制,右边尾部加0;m>>n,表⽰m⼆进制,右边尾部去掉1位;m>>>n,表⽰m⼆进制,忽略其符号位,从左⾄右,去掉最后的n位;不存在'<<<';1public static void main(String[] args) {2int integer = 2;3 printBinary(integer);4 integer = 2 >> 1;5 printBinary(integer);6 integer = 2 >> 2;7 printBinary(integer);8 integer = 2 >> 3;9 printBinary(integer);10 System.out.println("====================");11 integer = 2 << 1;12 printBinary(integer);13 integer = 2 << 2;14 printBinary(integer);15 integer = 2 << 3;16 printBinary(integer);17 System.out.println("====================");18 integer = -2 << 1;19 printBinary(integer);20 System.out.println("====================");21 integer = -2 >> 1;22 printBinary(integer);23 System.out.println("====================");24 integer = 3 >> 1;25 printBinary(integer);26 System.out.println("====================");27 integer = -2;28 printBinary(integer);29 printBinary(integer>>>1);30 printBinary(-integer);31 printBinary(-integer>>>1);32 }33private static void printBinary(Integer integer) {34 System.out.println("Integer.toBinaryString()="+Integer.toBinaryString(integer)+", integer="+integer);35 }36/**37 Integer.toBinaryString()=10, integer=238 Integer.toBinaryString()=1, integer=139 Integer.toBinaryString()=0, integer=040 Integer.toBinaryString()=0, integer=041 ====================42 Integer.toBinaryString()=100, integer=443 Integer.toBinaryString()=1000, integer=844 Integer.toBinaryString()=10000, integer=1645 ====================46 Integer.toBinaryString()=11111111111111111111111111111100, integer=-447 ====================48 Integer.toBinaryString()=11111111111111111111111111111111, integer=-149 ====================50 Integer.toBinaryString()=1, integer=151 ====================52 Integer.toBinaryString()=11111111111111111111111111111110, integer=-253 Integer.toBinaryString()=1111111111111111111111111111111, integer=214748364754 Integer.toBinaryString()=10, integer=255 Integer.toBinaryString()=1, integer=156*/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//负数右移运算测试示例:
public class ZF {
public static void main(String[] args){
int x=-5;
int y=x>>1;
int z=x>>>1;
System.out.println("x="+x+" y="+y+" z="+z);
}
}
// 1、当x=-5 时,右移1位后,问y 和z 的值是什么?
// 2、当x=-6 时,右移1位后,问y 和z 的值是什么?
// 3、当x=-7 时,右移1位后,问y 和z 的值是什么?
// 4、当x=-7 时,右移2位后,问y 和z 的值是什么?
// 请问最后结论是什么?
// (对于“>>”有符号右移运算,其规则是:当负数右移时,符号位的1不参与移位;在移位中当移出去的是数字1时,则最后结果应加1;当移出去的是数字0,则最后结果不加1。

// 对于“>>>”无符号右移运算,其规则是:当负数右移时,它是以补码方式参加向右移位。

//左边移出的空位被0;不论右边移出去的是0还是1,则最后结果均不加1。

)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//负数右移运算测试示例:
package pk.aa;
public class TestMoveBit {
public static void main(String[] args){
int x=-5;
/**“>>”为有符号的右移,它是以原码方式参加向右移位。

*负号位的1不参与移位;在移位中当移出去的是数字1时,
*则最后结果应加1;当移出去的是数字0,则最后结果不加1
*/
int y=x>>1;
/**“>>>”为无符号的右移,它是以补码方式参加向右移位。

*左边移出的空位被0;不论右边移出去的是0还是1,则最后结果
*均不加1。

*/
int z=(x>>>1);
System.out.println("x="+x+" y="+y+" z="+z);
int s=0;
for(int i=2; i<=30; i++){
s+=(int)(Math.pow(2, i));
}
s=s+1;
System.out.println("s="+s);
boolean b1= s==z;
System.out.println("s==z "+(b1? "相等":"不相等"));
}
}
/**
*int x=-5;
*int y=x>>1;
*
*原码:10000000000000000000000000000101
*右移1位后:1X000000000000000000000000000010
*+1
*-------------------------------------------------
*1X000000000000000000000000000011
*结果为:-3
*
*int x=-5;
*int y=x>>>1;
*
*原码:10000000000000000000000000000101
*反码:11111111111111111111111111111010
*补码:11111111111111111111111111111011//说明:补码即为无符号数,即是正数
*右移1位后:X1111111111111111111111111111101
*空位补0后:01111111111111111111111111111101
*--------------------------------------------------
*结果为:2147483645
*
*/
// 1、当x=-5 时,右移1位后,问 y 和 z 的值是什么?
// 2、当x=-6 时,右移1位后,问 y 和 z 的值是什么?
// 3、当x=-7 时,右移1位后,问 y 和 z 的值是什么?
// 4、当x=-7 时,右移2位后,问 y 和 z 的值是什么?
// 请问最后结论是什么?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////。

相关文档
最新文档