Java 移位运算符的复合_Java移位运算符
移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<>(带符号右移)和>>>(无符号右移)。
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。
三种移位运算符的移动规则和使用如下所示: <
语法格式: 需要移位的数字 << 移位的次数
例如: 3 << 2,则是将数字3左移2位
计算过程: 3 << 2
首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
语法格式: 需要移位的数字 >> 移位的次数
例如11 >> 2,则是将数字11右移2位
计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
>>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
其他结构和>>相似。
小结
二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。
实例操作: public class URShift {
public static void main(String[] args) {
int i = -1;
i >>>= 10;
//System.out.println(i);
mTest();
}
public static void mTest(){
//左移
int i = 12; //二进制为:0000000000000000000000000001100
i <<= 2; //i左移2位,把高位的两位数字(左侧开始)抛弃,低位的空位补0,二进制码就为0000000000000000000000000110000
System.out.println(i); //二进制110000值为48;
System.out.println("
");
//右移
i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100
System.out.println(i); //二进制码为1100值为12
System.out.println("
");
//右移example
int j = 11;//二进制码为00000000000000000000000000001011
j >>= 2; //右移两位,抛弃最后两位,整数补0,二进制码为:00000000000000000000000000000010
System.out.println(j); //二进制码为10值为2
System.out.println("
");
byte k = -2; //转为int,二进制码为:0000000000000000000000000000010
k >>= 2; //右移2位,抛弃最后2位,负数补1,二进制吗为:11000000000000000000000000000
System.out.println(j); //二进制吗为11值为2
}
}
在Thinking in Java第三章中的一段话:
移位运算符面向的运算对象也是
二进制的“位”。 可单独用它们处理整数类型(主类型的一种)。左移位运算符(<>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也 是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。
Java 移位运算符的复合_Java移位运算符相关推荐
- java右移位怎么算_Java移位运算符
一 描述 < >>:右移运算符(算术右移),如果数字为正数时,移位后在前面补0,为负数时,则在前面补1: >>>:无符号右移运算符(逻辑右移),忽略符号,空位补0即 ...
- java三元表达式必须返回_java – 三元运算符的右手表达式必须兼容...
您的方法声明返回类型是String.任何return语句都必须生成一个与声明的返回类型兼容的表达式. 但是,在这种情况下,返回类型可以是int,这解释了编译器拒绝它的原因. 这不是特定于三元运算符的, ...
- java位运算符取反_java运算符
Java 语言支持如下运算符: 算术运算符: +,-,*,/,%,++,-- 赋值运算符 = 关系运算符: >,<,>=,<=,==,!=, instanceof 逻辑运算符: ...
- java比较运算_Java比较运算符
注意哦: 1. > . < . >= . <= 只支持左右两边操作数是数值类型 2. == . != 两边的操作数既可以是数值类型,也可以是引用类型 public clas ...
- java中左移运算符解释_java左移右移运算符
位运算(只对byte.short.char.int.long有效) 左移和右移运算相当于实现整数乘以或除以2的n次方 2.7三元运算符表达式1的结果为true时,就为第二个表达式,如果为...... ...
- JAVA中常用的逻辑运算符_Java中常用的运算符
运算符是一种"功能"符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运 ...
- java中的位移运算符_Java 位移运算符
本人只是 Android小菜一个,写技术文档只是为了总结自己在最近学习到的知识,从来不敢为人师,如果里面有些不正确的地方请大家尽情指出,谢谢! 1.概述 Java 位移运算符是Java中基本的位运算操 ...
- java 60进制运算_Java【第二篇】基本语法之--进制、运算符
进制 生活中的进制:七进制(一周).十二进制(12小时制).二十四进制(24小时制).六十进制(分钟) 对于整数,有四种表示方式: 二进制(binary):0,1 ,满 2 进 1.以 0b 或 0B ...
- java中平方的表达式_JAVA语言中的运算符和表达式
JAVA--运算符 按运算符要求的运算符个数可分为一元.二元.三元运算符: 一元运算符有一个操作数:如正数或者负数前面的"+"."-",和自增"++& ...
- java中平方的表达式_Java中的运算符及表达式
常用的运算符:赋值运算符(=).加法运算符(+).乘法运算符(*).除法运算符(/).括号运算符(( )).余数运算符(%).布尔运算符. 注释符(//).注释的内容为双反斜杠后的内容至换行结束. j ...
最新文章
- 良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
- 阿里云发布三大人工智能产品:推动AI产业落地
- 笔记-项目管理基础知识-复习要点
- python中计算如何实现_基于python如何实现计算两组数据P值
- 大数据学习笔记27:MR案例——多输入源处理成绩
- 这段 JavaScript 代码能挖出你所有的访问记录!
- 【数据结构笔记】归并排序(merge_sort)+ 堆排序 -- python2.7
- wps中的相交_如何在wps中添加交叉引用 - 卡饭网
- 必应搜索结果跳转百度
- Wireshark基础知识(一)
- 【春节档排片地域可视化分析】
- 网页抖音批量取消关注JS代码
- 同时删除多个 PDF 文档前几页
- 人工智能在几年中快速发展,尖端技术慢慢向普及应用到各行各业
- 8个 Chatbot 框架介绍
- 人以善感,天以福应,人以恶感,天以灾应,原来天就是自己的镜子呀!
- Duda模式分类 ch2 习题
- 【笔记】雾计算中移动应用的优先级约束任务调度
- 网站建设基本流程规范
- 修复好一个科脉软件数据库