Java移位符
来源:互联网 发布:通关宝典考试软件下载 编辑:程序博客网 时间:2024/06/05 19:21
title:Java移位符
date:2017年11月12日21:58:00
java中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2 ,
>> : 右移运算符,num >> 1,相当于num除以2,对于正数,高位补0,对于负数,高位补1
>>> : 无符号右移,忽略符号位,空位都以0补齐
在介绍移位运算符之前,我们有必要讲一些计算机的基础知识:计算机中的原码、补码和反码
原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
反码:
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
Java移位运算符使用实例
我们来编写一个例子来分析Java移位运算符
package com.wangcc.MyJavaSE;public class ShiftingTest { public static void main(String[] args) { int num1 = -3; printInfo(num1); num1 = num1 >> 1; printInfo(num1); } private static void printInfo(int num) { System.out.println(Integer.toBinaryString(num)); }}
输出:
1111111111111111111111111111110111111111111111111111111111111110
首先,我们要知道在计算机中负数是用补码表示的,我们来证实这一点。
我们来计算下-3的补码。
首先,我们得到-3的原码。我们知道在Java中,int类型是32位的,所以原码:
10000000000000000000000000000011
反码,符号位不变,其他为均取反:
11111111111111111111111111111100
补码:反码+1
11111111111111111111111111111101
很明显和第一行输出是一致的。
然后第二行的输出是通过num1>>1操作之后得到的,>>1代表右移一位(>>2自然就表示右移两位)
右移运算符作用到负数时,采取的是高位补1的方式。所以得到的是
11111111111111111111111111111110
我们将num1>>1改成num1>>>2继续测试。
先我们按照无符号右移的高位补0
得到结果:
00111111111111111111111111111111
我们运行程序
11111111111111111111111111111101111111111111111111111111111111
和我们的预期是一样的。
阅读全文
0 0
- JAVA移位运算符
- JAVA移位运算符
- java 移位运算符
- JAVA移位运算符
- JAVA移位运算符
- JAVA移位运算符
- Java中的移位符
- JAVA移位运算符
- JAVA移位运算符
- java移位运算符
- Java移位运算符
- Java移位运算符
- Java 移位运算符
- JAVA移位运算符
- JAVA移位运算符
- java移位运算符
- Java移位运算符
- java移位符运用
- 网页中文词语抓取+词云显示
- Jetty架构和实现分析
- 图像旋转90度
- Linux下的常用命令
- 如何建立简易电路
- Java移位符
- 安卓toolbar反射产生图标
- hbase二级索引
- 排序—桶排序
- tf.equal (API r1.3)
- (补)NOIP2017Day2暴力记
- Spark2.10中使用累加器、注意点以及实现自定义累加器
- 【ENSP】之 VLAN间通信(三层交换)
- 开发Web安全与防护