关于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. 左移运算符 左移运算符<<使指定值的全部位都左移 ...
随机推荐
- PostgreSQL 查看单表大小
1. 在数据库中查单个表 select pg_size_pretty(pg_relation_size('table_name')); 2. 查出并按大小排序 SELECT table_schema ...
- C++标准库之stack
C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...
- 用 ConfigMap 管理配置 - 每天5分钟玩转 Docker 容器技术(159)
Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...
- IOS charles抓包HTTP
charles通常用来截取本地的网络封包,但也可以用它来截取其他设备上的网络请求.本篇以IOS为例,讲解如何进行相应的操作. 1.charles上的设置 要截取iphone上的网络请求,我们要先将ch ...
- 对于DFT频谱泄漏问题的研究
问题简介: 对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱.但是,在实际利用DFT求它的频谱时,对时域做了截断,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱 ...
- oracle初试、函数、增删改查、多表查询
安装oracle后的测试以及解锁账户 安装后打开命令行,输入 sqlplus 回车后会提示输入用户名,输入 sys或者system 回车后输入密码,密码为安装or ...
- 小白的Python之路_day2
Python 的逻辑运算符具有短路原则,例如: or 运算符前面只要是 True,后面都不需要看了,结果就是 True. Python 中表示为真必须用 True,如果用 true 则会当成是变量, ...
- MFC多线程
当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...
- CentOS7 YUM 安装NGINX
1.先添加源: nano /etc/yum.repos.d/nginx.repo 把下边这段代码添加到nginx.repo中去.[nginx] name=nginx repo baseurl=http ...
- Azkaban-2.5及Plugins的安装配置
Azkaban是由LinkedIn开发的调度工具,可以用于调度Hadoop中的相互依赖的Job.有时候,在Hadoop集群中运行的Job是相互依赖的,某些任务需要顺序的执行,这种场景下使用Azkaba ...