java 位移运算,先出【运算结果】,不懂的可以运行程序:
6的二进制是: 110
6进行左移两位运算后结果是:11000,也就是24,可以看出来,正数的左移N位就是在右边末尾加N个0
-33的二进制是: 11111111111111111111111111011111
-33进行左移两位运算后结果是:11111111111111111111111101111100,也就是-132,可以看出来,负数的左移N位就是在右边末尾加N个0,为了保持位数不变,高位直接舍去
124的二进制是: 1111100
124进行右移两位位位运算后结果是:11111,也就是31可以看出正数右移就是在高位补0,然后为保持位数不变,低位舍去对应位数
-124的二进制是: 11111111111111111111111110000100
-124进行右移两位位位运算后结果是:11111111111111111111111111100001,也就是-31
124的二进制是: 1111100
124进行右移三位位移运算后结果是:1111,也就是15可以看出如果移位的位数过多会直接舍去最低位
-45的二进制是: 11111111111111111111111111010011
-45进行右移19位有符号位移运算后结果是:11111111111111111111111111111111,也就是-1,可以看出来,无符号负数位移是高位补1
-45进行右移19位 无符号 位移运算后结果是:1111111111111,也就是8191,可以看出来,无符号位移是即使是负数高位也是补0
代码如下:
- package com.hxw.T2;
- public class ShiftOperate {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 每个int整数是32位我们二进制用0000 0000 0000 0000 0000 0000 0000 0000 来表示0
- //0000 0000 0000 0000 0000 0000 0000 0110 表示6
- System.out.println("6的二进制是: "+Integer.toBinaryString(6));
- System.out.println("6进行左移两位运算后结果是:"+(Integer.toBinaryString(6<<2))+",也就是"+(6<<2)+",可以" +
- "看出来,正数的左移N位就是在右边末尾加N个0");
- System.out.println();
- System.out.println("-33的二进制是: "+Integer.toBinaryString(-33));
- System.out.println("-33进行左移两位运算后结果是:"+(Integer.toBinaryString(-33<<2))+",也就是"+(-33<<2)+",可以" +
- "看出来,负数的左移N位就是在右边末尾加N个0,为了保持位数不变,高位直接舍去");
- System.out.println();
- System.out.println("124的二进制是: "+Integer.toBinaryString(124));
- System.out.println("124进行右移两位位位运算后结果是:"+(Integer.toBinaryString(124>>2))+",也就是"+(124>>2)+"可以" +
- "看出正数右移就是在高位补0,然后为保持位数不变,低位舍去对应位数");
- System.out.println();
- System.out.println("-124的二进制是: "+Integer.toBinaryString(-124));
- System.out.println("-124进行右移两位位位运算后结果是:"+(Integer.toBinaryString(-124>>2))+",也就是"+(-124>>2));
- System.out.println();
- System.out.println("124的二进制是: "+Integer.toBinaryString(124));
- System.out.println("124进行右移三位位移运算后结果是:"+(Integer.toBinaryString(124>>3))+",也就是"+(124>>3)+"可以看出如果移位的位数过多会直接舍去最低位");
- System.out.println();
- System.out.println("-45的二进制是: "+Integer.toBinaryString(-45));
- System.out.println("-45进行右移19位有符号位移运算后结果是:"+(Integer.toBinaryString(-45>>19))+",也就是"+(-45>>19)+",可以看出来,无符号负数位移是高位补1");
- System.out.println("-45进行右移19位 无符号 位移运算后结果是:"+(Integer.toBinaryString(-45>>>19))+",也就是"+(-45>>>19)+",可以看出来,无符号位移是即使是负数高位也是补0");
- System.out.println();
- }
- }