java移位运算符?Java中的位移运算符
你是否对于java移位运算符和Java中的位移运算符感到困惑?别担心,今天小编将为您揭开这个谜团,让我们一同探索吧!
java位移运算符
学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过Java学习机构学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累。
今天给大家分享的技术知识是:Java中的位移运算符!
1)“有符号”左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
左移移位相当于乘以2,例如
3<< 2//12则是将数字3左移2位 3*2*2= 3*(2的2次方)
分析:首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2)“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
>>运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,移位后得到的数字为正数则补0,负数补1。
例如11>> 2,则是将数字11右移2位
分析:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
3) Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0
4)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。
5)位运算符的优先级
~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。
java左移运算符的问题,一定给分!
1.左移运算符
左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n位,就相当于乘上2的n次方,例如下面的例子。
public class data17
{
public static void main(String[] args)
{
int a=2;
int b=2;
System.out.println("a移位的结果是:"+(a<<b));
}
}
运行结果
a移位的结果是:8
分析上面的程序段:
首先从本质上来分析,2的二进制是00000010,它向左移动2位,就变成了00001000,即8。如果从另一个角度来分析,它向左移动2位,其实就是乘上2的2次方,结果还是8。
2.右移运算符
右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n位,就相当于除上2的n次方。
public class data18
{
public static void main(String[] args)
{
int a=16;
int b=2;
System.out.println("a移位的结果是:"+(a>>>b));
}
}
运行结果
a移位的结果是:4
分析上面的程序段:从本质上来分析,16的二进制是00010000,它向右移动2位,就变成了00000100,即4。如果从另一个角度来分析,它向右移动2位,其实就是除以2的2次方,结果还是4。
3.带符号的右移运算符
带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。
public class data19
{
public static void main(String[] args)
{
int a=16;
int c=-16;
int b=2;
int d=2;
System.out.println("a的移位结果:"+(a>>b));
System.out.println("c的移位结果:"+(c>>d));
}
}
运行结果
a的移位结果:4
c的移位结果:-4
分析上面的程序段:
a的值是16,转换成二进制是00010000,让它右移两位成00000100即4。
c的值是-16,转换成二进制是11101111,让它右移一位成11111011即-4。
Java中,位运算符>>,右移时左边何时补0,何时补1
在Thinking in Java第三章中的一段话:
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。
Java中的位移运算符
移位运算符就是在二进制的基础上对数字进行平移我们知道 Java中byte short和char类型在进行计算时都是先将其转换为int类型同样在进行移位运算时也不例外它们移位后的结果也都会变成int类型由于int类型为位的()所以对于byte short char和int进行移位时规定实际移动的次数最多是位如果超过则按n= n%来计算也就是说移位次和移位次得到的结果相同移动long型的数值时(long是位的)规定实际移动的次数是移动次数和的余数也就是移动次和移动次得到的结果相同您可以亲自动手做下试验现在我们介绍Java中的三种位移运算符)《(左移)运算规则按二进制形式把所有的数字向左移动对应的位数高位移出(舍弃)低位的空位补零语法格式需要移位的数字《移位的次数例如《则是将数字左移位计算过程《首先把转换为二进制数字(int类型的话为位字节 long的话为位字节)然后把该数字高位(左侧)的两个零移出其他的数字都朝左平移位最后在低位(右侧)的两个空位补零则得到的最终结果是则转换为十进制是数学意义在数字没有溢出的前提下对于正数和负数左移一位都相当于乘以的次方左移n位就相当于乘以的n次方比如《=*)》(带符号右移)运算规则按二进制形式把所有的数字向右移动对应位数低位移出(舍弃)高位的空位补符号位即正数补负数补语法格式需要移位的数字》移位的次数例如》则是将数字右移位计算过程的二进制形式为然后把低位的最后两个数字移出因为该数字是正数所以在高位补零则得到的最终结果是转换为十进制是数学意义右移一位相当于除右移n位相当于除以的n次方)>>>(无符号右移)运算规则按二进制形式把所有的数字向右移动对应位数低位移出(舍弃)高位的空位补零其他结构和》相似位移运算通常用来对代码进行速度上的优化用它来代替乘除法将是很好的选择下面来举几个例子希望对大家使用位移运算符有所帮助用位移运算符来实现 i/=++所以对i/可以这样来表示( i《)+( i《)+( i《)写出( q《)+( q《)实现的代码原式= q* ^+ q* ^= q*(+)= q* lishixinzhi/Article/program/Java/hx/201311/26978
OK,本文到此结束,希望对大家有所帮助。