zoukankan      html  css  js  c++  java
  • java位运算符

    补码:

    补码又称为二补数,就是就是将该数字作比特反相运算(即一补数或反码),再将结果加 1,一个负数可以由其相反数的补码来表示。补码的好处在于:两数之间的减法亦可表示为一个数与另一数补码之间的加法,从而只需使用加法电路和二补数电路即可完成各种有符号数的加减法。

    e.g:有0011(3)和1111(-1),0011+1111=10010(2)

    在n比特的二进制数中,最大整数为2n-1-1,最小负数为-2n-1,第n位为符号位。

    计算补码:

    如5用8位二进制数表示为0000 0101,则其一补数即反码为1111 1010,二补数为一补数加1,所以5的补码为1111 1011(-5)

    说明:以e.g所示为例,0011+1111中的1111仅为-1的补码形式,而非15的二进制表达形式。

    左移运算符:通用格式  value <<num num为左移的位数

    运算法则:丢弃最高位,0进补最低位

    对移位运算符来讲,右侧参数需要进行模32运算,前提是value为int型。

    在数字没有溢出的前提下,左移一位相当于乘以2的一次放,左移n位相当于乘以2的n次方

    当左移的运算数是short,或者byte类型时,左移后会自动转换成int型

    右移运算符:value>>num

    运算法则:低位舍去,高位补符号位

    右移一位相当于除以2,右移n位相当于除以2的n次方

    无符号右移 value>>>num

    忽略符号位的扩张,0补最高位

    无符号右移只对32位,64位值有意义

     1 public static void main(String args[]){
     2 
     3         int i=1;
     4         System.out.println(Integer.toBinaryString(i));
     5         System.out.println(i<<3);
     6         System.out.println(Integer.toBinaryString(i<<3));
     7         System.out.println(i<<35);
     8         System.out.println(Integer.toBinaryString(i<<35));
     9         
    10         
    11         int t;  
    12         int num = 0xFFFFFFE; 
    13            System.out.println("num="+num+"二进制表示为"+Integer.toBinaryString(num));
    14            for(t=0; t<4;t++) {  
    15              num = num << 1;   
    16              System.out.println("num="+num+"二进制表示为"+Integer.toBinaryString(num));  
    17            }  
    18            System.out.println("-32"+"二进制表示为"+Integer.toBinaryString(-32));  
    19 
    20     }

     输出:

    8
    1000
    8
    1000
    num=268435454二进制表示为1111111111111111111111111110
    num=536870908二进制表示为11111111111111111111111111100
    num=1073741816二进制表示为111111111111111111111111111000
    num=2147483632二进制表示为1111111111111111111111111110000
    num=-32二进制表示为11111111111111111111111111100000
    -32二进制表示为11111111111111111111111111100000

  • 相关阅读:
    Codeforces Round #251 (Div. 2) A
    topcoder SRM 623 DIV2 CatAndRat
    topcoder SRM 623 DIV2 CatchTheBeatEasy
    topcoder SRM 622 DIV2 FibonacciDiv2
    topcoder SRM 622 DIV2 BoxesDiv2
    Leetcode Linked List Cycle II
    leetcode Linked List Cycle
    Leetcode Search Insert Position
    关于vim插件
    Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  • 原文地址:https://www.cnblogs.com/wpzy2311/p/4220055.html
Copyright © 2011-2022 走看看