关于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. 左移运算符 左移运算符<<使指定值的全部位都左移 ...
随机推荐
- jvm(四):垃圾回收
垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如 ...
- Python中的str与unicode处理方法
Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客 python2.x中处理 ...
- HTML标签部分(块级/行级)
一.基本块级标签 1.HTML标签的分类: a.块级标签:显示为块状,独占一行,自动换行. b.行级标签:在一行中,从左往右依次排列,不会自动换行. 2.h标签(标题标签) h标签 ...
- c++类的声明
就像函数的声明与定义分离一样,我们也可以仅声明类而暂时不定义类: class ClassName;//ClassName类的声明 这种声明有时被称作前向声明 对于一个类来说,我们创建它的对象之前该类必 ...
- .NET中的各种池
在.NET中,常用到的池有四个:字符串拘留池.线程池 .应用程序池.数据库连接池. 字符串拘留池 在.NET中字符串是不可变对象,修改字符串变量的值会产生新的对象.为降低性能消耗及减小程序集大小,.N ...
- Oracle中表字段相关操作举例
--创建测试表 create or replace table student ( xh ), --学号 xm ), --姓名 sex ), --性别 birthday date, --日期 sal ...
- 匿名函数lambda
匿名函数的定义 在python中,匿名函数的定义如下: func =lambda x:x+1 #定义匿名函数,x为传参,x+1为返回值,func为函数名 res = func(10) #执行匿名函数 ...
- acm几何
fzu 2231,N个点求构成的平行四边行个数. 题意简重点在优化上 #include <cstdio> #include <iostream> #include <cs ...
- 安卓高级 WebView的使用到 js交互
我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...
- linux:如何指定进程运行的CPU
coolshell最新的文章<性能调优攻略>在"多核CPU调优"章节,提到"我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为 ...