Java运算符(一)

本文详细介绍了Java中的有符号左移(<<)、有符号右移(>>)以及无符号右移(>>>)运算符在正负整数上的工作原理和实际应用,包括它们如何处理二进制位移和数值转换。通过实例演示,读者可以理解不同移位操作对数值的影响。
摘要由CSDN通过智能技术生成

移位运算符 "<<",">>",">>>"

1、正整数原码、反码、补码都相同,如: 10的原码、反码、补码都为 0000 0000 0000 1010

2.、Java对于负整数都是以补码的形式进行存储(补码=反码+1),如: -10的二进制为1000 0000 0000 1010,反码就是 1111 1111 11111 0101,补码即为 1111 1111 1111 0110 

  • 有符号左移位(<<),将其转换为二进制后向左移动位数,低位用0填充

一、 有符号左移位(正整数)

int number = 10;    //初始值
printBinary(number);    //转化为二进制
number = number << 1;   //左移1位,低位添0
System.out.println("左移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);

public void printBinary(int num){
    System.out.println(Integer.toBinaryString(num));    //二进制结果为 1010
}

控制台打印结果: 

10转化二进制为:1010
左移1位后二进制为:10100
十进制显示结果为:20

二、有符号左移位(负数)

int number = -10;    //初始值
printBinary(number);    //转化为二进制
number = number << 1;   //左移1位,低位添0
System.out.println("左移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);

控制台打印结果:  

-10转化二进制为:11111111111111111111111111110110
左移1位后二进制为:11111111111111111111111111101100
十进制显示结果为:-20

 

  • 有符号右移位(>>),将其转化为二进制后向右移动位数,正整数高位用0填充,负数高位用1填充

一、有符号右移位(正整数)

int number = 10;    //初始值
printBinary(number);    //转化为二进制
number = number >> 1;   //右移1位,低位添0
System.out.println("右移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);

控制台打印结果: 

10转化二进制为:1010
右移1位后二进制为:101
十进制显示结果为:5

二、有符号右移位(负数)

int number = -10;    //初始值
printBinary(number);    //转化为二进制
number = number >> 1;   //右移1位,高位添0
System.out.println("右移1位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);

控制台打印结果: 

-10转化二进制为:11111111111111111111111111110110
右移1位后二进制为:11111111111111111111111111111011
十进制显示结果为:-5
  • 无符号右移(>>>),它跟有符号唯一差别就是 " 不管是正整数还是负数,高位都是用0填充 "

一、 无符号右移(正整数)

int number = 10;    //初始值
printBinary(number);    //转化为二进制
number = number >>> 2;   //右移2位,高位添0
System.out.println("右移2位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);

 控制台打印结果:

10转化二进制为:1010
右移1位后二进制为:10
十进制显示结果为:2

二、 无符号右移(负数)

int number = -10;    //初始值
printBinary(number);    //转化为二进制
number = number >>> 2;   //左移1位,低位添0
System.out.println("右移2位后二进制为:"+Integer.toBinaryString(number));
System.out.println("十进制显示结果为:"+number);


public void printBinary(int num){
    System.out.println(num+"转化二进制为:"+Integer.toBinaryString(num));
}

控制台打印结果:

-10转化二进制为:11111111111111111111111111110110
右移2位后二进制为:111111111111111111111111111101
十进制显示结果为:1073741821
  •  无符号左移(>>>),实际上Java中没有无符号左移的说法,无符号左移和有符号左移是一样的概念。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值