关于Java的移位运算符
/**
* 测试移位运算符<br/>
* "<<" 左移 : 右侧补0<br/>
* ">>" 带符号右移 : 左侧补符号位:正数补0,负数补1<br/>
* ">>>"无符号右移 : 左侧补0<br/>
*/
public class TestShift {
public static void main(String[] args) {
testLeftShift();
testRightShift();
testUnsignedRightShift();
}
/**
* 左移: 右侧补0
*/
public static void testLeftShift(){
int num = -8;
int shift = 2;
leftShift(num, shift);
leftShift(-num, shift);
System.out.println("--------------");
}
/**
* 左移: 右侧补0
*/
public static void leftShift(int num, int shift){
// num 左移 shift位
int r = num << shift;
System.out.println("向左移位: "+ num +" << "+shift);
System.out.println("移位前:"+binary(num));
System.out.println("移位后:"+binary(r));
System.out.println("");
}
/**
* 测试带符号右移: 左侧补符号位
*/
public static void testRightShift(){
int num = -8;
int shift = 2;
rightShift(num, shift);
rightShift(-num, shift);
System.out.println("--------------");
}
/**
* 带符号右移: 左侧补符号位
*/
public static void rightShift(int num, int shift){
// num 左移 shift位
int r = num >> shift;
System.out.println("(带符号)向右移位: "+ num +" >> "+shift);
System.out.println("移位前:"+binary(num));
System.out.println("移位后:"+binary(r));
System.out.println("");
}
/**
* 测试右移: 左侧补0
*/
public static void testUnsignedRightShift(){
int num = -8;
int shift = 2;
unsignedRightShift(num, shift);
unsignedRightShift(-num, shift);
System.out.println("--------------");
}
/**
* 右移: 左侧补0
*/
public static void unsignedRightShift(int num, int shift){
// num 左移 shift位
int r = num >>> shift;
System.out.println("无符号向右移位: "+ num +" >>> "+shift);
System.out.println("移位前:"+binary(num));
System.out.println("移位后:"+binary(r));
System.out.println("");
}
public static String binary(int i){
return alignRight(Integer.toBinaryString(i),32,'0');
}
/**
* 向右对齐
* @param str 原始字符串
* @param digit 需要的总位数
* @param addChar 添加的字符
* @return
*/
public static String alignRight(String str, int digit, char addChar){
str = String.valueOf(str);
digit = digit > 0 ? digit : 0;
StringBuilder builder = new StringBuilder(digit);
builder.append(str);
for (int len = str.length(); len < digit; len++) {
builder.insert(0, addChar);
}
//
return builder.toString();
}
}
关于Java的移位运算符的更多相关文章
- Java的移位运算符
1.左移运算符:<< 丢弃左边指定位数,右边补0. 注意: 当int类型进行左移操作时,左移位数大于等于32位操作时,会先求余(%)后再进行左移操作.也就是说左移32位相当于不进行移位操作 ...
- Java 基础--移位运算符
移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种: <<(左移).>>(带符号右移)和>>>(无符号右移). 1.左移 按 ...
- Java:Java的<<<移位运算符详解
1) 左移运算(<<) 左移就是把所有位向左移动几位 如: 12 << 2 意思就是12向左移动两位 12的二进制是: 0000 1100 通过这个图我们 ...
- java中移位运算符:<<、>>和>>>之间的比较
一.说明 <<:运算符将二进制位进行左移操作 >>:运算符将二进制位进行右移操作 >>>:运算符将用0填空高位 二.举例 /** * *----------c ...
- java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- java 移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- 移位运算符(JAVA)
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >&g ...
- java移位运算符具体解释
java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的全部位都左移 ...
随机推荐
- Map,HashMap,TreeMap
一.HashMap,TreeMap差别 1.两种常规Map性能 HashMap:适用于在Map中插入.删除和定位元素. Treemap:适用于按自然顺序或自定义顺序遍历键(key). 2.总结 Has ...
- Go 实现判断变量是否为合法数字 IsNumeric 算法
[转] http://www.syyong.com/Go/Go-to-determine-whether-the-variable-is-a-legal-digital-algorithm.html ...
- Tomcat,eclipse热部署的三种方式
热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效.但是对配置文件的修改除外! 怎么说呢?热部署其实用的算少了,热部署怎么说都是个人部署的,大点的公 ...
- day07 Cookie 和 Session(非常重要)
day07 Cookie 和 Session 1. 会话技术 2. cookie 的方法和 cookie 案例-显示用户上次访问网站的时间 3. cookie 的细节 - 删除 cookie 4. S ...
- Java语言程序设计-Markdown格式作业模板
Markdown格式作业模板如下,大家可以直接复制粘贴使用. 注意:作业中不能只写答案,题目本身也要出现.. # 1. 本章学习总结 你对于本章知识的学习总结 # 2. 书面作业 **Q1 java ...
- A discussion of Dead Connection Detection, Resource Limits, V$SESSION, V$PROCESS and OS processes
A discussion of Dead Connection Detection, Resource Limits, V$SESSION, V$PROCESS and OS processes (文 ...
- webpack 命令行 传入自定义变量
https://github.com/webpack/webpack/issues/2254 --env 变量 Yes this is intended. Custom argumens can be ...
- 安卓高级 WebView的使用到 js交互
我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...
- Apache Curator入门实战
Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...
- Linux 下不经过BIOS重启(i386)
前段时间有个项目,要求在Linux下不经过BIOS重启,i386平台. 一.可行性分析 众所周知,BIOS中包含了CPU及其他各种设备的初始化代码,Linux系统运行之后是否能够将各种用到的设备返回到 ...