java 的三种移位方式的本质
来源:互联网 发布:php 站点根目录 编辑:程序博客网 时间:2024/06/11 09:57
java的三种移位方式 << ,>>, >>>。
>>表示右移,最高位由原来的符号为填充, <<表示为左移,则无所谓符号为,会将符号位侵占,同时最后1位补0; >>>表示右移,但是最高位不由原符号位填充。
同时如果是一个byte , char, short,移位的话,则会先提升成int型之后再移位。int,long都不用再提升。
byte a = (byte)0x40;
byte b = (byte) (a << 1);
System.out.println(b);
System.out.println(a << 1);
byte c = (byte)0x80;
byte b = (byte) (a << 1);
System.out.println(b);
System.out.println(a << 1);
byte c = (byte)0x80;
System.out.println(c >> 1);
输出为:
-128
128
-64
持续地左移移位会使数字一直乘2,直到数值越界。
public class a {
public static void main(String[] args) {
int a = 1;
int b = -1;
test(a);
test(b);
test(10);
test(2);
}
public static void test(int i){
System.out.println("初始值为: " + i);
for (int a = 0; a != 31; a++){
System.out.print(i = (i << 1));
System.out.print(" ");
}
System.out.println();
}
public static void main(String[] args) {
int a = 1;
int b = -1;
test(a);
test(b);
test(10);
test(2);
}
public static void test(int i){
System.out.println("初始值为: " + i);
for (int a = 0; a != 31; a++){
System.out.print(i = (i << 1));
System.out.print(" ");
}
System.out.println();
}
}
初始值为: 1
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648
初始值为: -1
-2 -4 -8 -16 -32 -64 -128 -256 -512 -1024 -2048 -4096 -8192 -16384 -32768 -65536 -131072 -262144 -524288 -1048576 -2097152 -4194304 -8388608 -16777216 -33554432 -67108864 -134217728 -268435456 -536870912 -1073741824 -2147483648
初始值为: 10
20 40 80 160 320 640 1280 2560 5120 10240 20480 40960 81920 163840 327680 655360 1310720 2621440 5242880 10485760 20971520 41943040 83886080 167772160 335544320 671088640 1342177280 -1610612736 1073741824 -2147483648 0
初始值为: 2
4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648 0
持续地右移移位会使数字一直整除2,但是对-1不管用。
public class a {
public static void main(String[] args) {
int a = 1;
int b = -1;
test(a);
test(b);
test(10);
test(2);
test(16);
test(-16);
}
public static void test(int i){
System.out.println("初始值为: " + i);
for (int a = 0; a != 31; a++){
System.out.print(i = (i >> 1));
System.out.print(" ");
}
System.out.println();
}
public static void main(String[] args) {
int a = 1;
int b = -1;
test(a);
test(b);
test(10);
test(2);
test(16);
test(-16);
}
public static void test(int i){
System.out.println("初始值为: " + i);
for (int a = 0; a != 31; a++){
System.out.print(i = (i >> 1));
System.out.print(" ");
}
System.out.println();
}
}
初始值为: 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
初始值为: -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
初始值为: 10
5 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
初始值为: 2
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
初始值为: 16
8 4 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
初始值为: -16
-8 -4 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
0 0
- java 的三种移位方式的本质
- 透析Java本质-交换变量的几种方式
- 字符串循环移位的三种算法
- Java的移位操作
- java的移位运算
- Java的移位操作
- java的移位运算
- Java 的移位运算
- Java的移位操作
- JAVA的移位运算
- java基础(三):移位符的运用
- 本质啊本质之三:指针的本质
- java的线程的三种方式
- quartusII中用Verilog实现移位的几种方式
- JAVA中泛型的本质
- Java中泛型的本质
- java中泛型的本质
- Java中泛型的本质
- Android中使用GridView实现底部标签页效果
- php数组函数总结
- uva1267 Network
- javaScript 对象转JSON,Java String 转JSON对象
- jq添加移除元素
- java 的三种移位方式的本质
- 【unity小技巧之五】unity编辑器脚本添加类目到unity Preferences中
- iOS 动画效果:Core Animation & Facebook
- 用MyEclipse10.0开发基于JAX-WS的Web Service实例
- Android换页指示器TabIndicator
- BCGPFormView嵌入左侧显示属性页,并且同窗口等比例缩放,属性页添加图表随窗口尺寸变化而变化
- js 校验
- Spring中@Transactional事务回滚实例及源码
- Lua - 10