移位运算符
来源:互联网 发布:安卓磁力解析源码 编辑:程序博客网 时间:2024/04/26 00:47
(1)概述
>>(<<):带符号右(左)移,高位补符号位。
>>>(<<<):不带符号右(左)移,高位补零。
<<:左移,末尾补零。
(2)在Thinking in Java第三章中的一段话:
移位运算符面向的运算对象也是
二进制的“位”。可单独用它们处理整数类型(主类型的一种)。
A、 左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
B、“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
C、 Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
D、若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。
(3)详细规则
A、 左移运算符
左移运算符<<使指定值的所有位都左移规定的次数。
1)它的通用格式如下所示:
value << num
num 指定要移位值value 移动的位数。
左移的规则只记住一点:丢弃最高位,0补最低位
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。
2)运算规则
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃;
当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。
当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
3)数学意义
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
B、 右移运算符
右移运算符<<使指定值的所有位都右移规定的次数。
1)它的通用格式如下所示:
value >> num
num 指定要移位值value 移动的位数。
右移的规则只记住一点:符号位不变,左边补上符号位
2)运算规则:
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign extension ),在进行右移
操作时用来保持负数的符号。
3)数学意义
右移一位相当于除2,右移n位相当于除以2的n次方。
C、无符号右移
无符号右移运算符>>>
它的通用格式如下所示:
value >>> num
num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
无符号右移运算符>>> 只是对32位和64位的值有意义
- 移位运算符符
- 移位运算符
- 移位运算符
- JAVA移位运算符
- JAVA移位运算符
- java 移位运算符
- 移位运算符
- JAVA移位运算符
- JAVA移位运算符
- 移位运算符
- JAVA移位运算符
- 二进制移位运算符
- PHP 移位运算符
- JAVA移位运算符
- JAVA移位运算符
- java移位运算符
- C++移位运算符
- Java移位运算符
- 小猪
- 额
- Linux安装JDK详细步骤
- 对不起
- 数据图形展现站点推荐
- 移位运算符
- PKU 1039 Pipe
- 安装sql2000: 出现 A previous program installation created pending file operations on the installation machine. You must restart the
- jquery+php实现用户输入搜索内容时自动提示
- 一维数组转单字段DataTable
- 高效的使用空间SQL操作空间数据库系列之一
- C语言变长参数实现
- info文档查看
- C++网络资源