「java位置运算」java按位运算
今天给各位分享java位置运算的知识,其中也会对java按位运算进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 位运算
- 2、java中位运算问题
- 3、JAVA位运算符
- 4、java中的位运算
- 5、java位移运算符
java 位运算
我的分析是建立在A、B、C三步彼此独立的情况下:
int b1 = 1; b1在计算机的二进制为0000 0000 0000 0000 0000 0000 0000 0001
int b2 = -1;b2在计算机的二进制为 1111 1111 1111 1111 1111 1111 1111 1111
和 是算术位移符,是逻辑位移符
算术位移符和逻辑位移符的区别是:右移时,算术位移左边补符号位,逻辑位移左边补0;左移时,二者没有区别,都是在右边补0。
b1 = 31 == 0000 0000 0000 0000 0000 0000 0000 0001 31 == 1000 0000 0000 0000 0000 0000 0000 0000 == -2147483648
b1 = 31 == 0000 0000 0000 0000 0000 0000 0000 0001 31 == 0000 0000 0000 0000 0000 0000 0000 0000 == 0
b2 = 31 == 1111 1111 1111 1111 1111 1111 1111 1111 31 == 1000 0000 0000 0000 0000 0000 0000 0000 == -2147483648
b2 = 31 == 1111 1111 1111 1111 1111 1111 1111 1111 31 == 1111 1111 1111 1111 1111 1111 1111 1111 == -1
b1 = 31 == 0000 0000 0000 0000 0000 0000 0000 0001 31 == 0000 0000 0000 0000 0000 0000 0000 0000 == 0
b2 = 31 == 1111 1111 1111 1111 1111 1111 1111 1111 31 == 0000 0000 0000 0000 0000 0000 0000 0001 == 1
java中位运算问题
计算思路:
1,当做位运算时要先知道是坐位移还是有位移,左位移符号为而右位移符号为
2,需要将对应的数字转换为二进制,即可以将其拆分成为2^n,2^n算的值是离对应要转换的值余数最小的数,如需要转换的是79那么最小余数为64=2^6以此类推可以得出79=64+8+4+2+1=2^6+2^3+2^2+2^1+2^0=0100 1111(次数+1是对应的位置即为即从右到左第一位为1,第二三四和七位位移,如果为8位表示那么其它位为0);
3,将得到的值位移,位移方向如果是左位移那么向左移动对应的位数(位数为符号右边的那个数),右位移同理。
4,将位移后的二进制转换为十进制。转换方法是十进制转二进制的逆向运算。
过程:
首先将79分解为二进制为:0100 1111(79=64+8+4+2+1也就对应的0100 1111=0100 0000 +1000+0100+0010+0001),当已知了79的二进制后将对应的二进制向右移动2位,当移动一位时对应的高位补0(负数补1),低位移除。0010 0111,以此再移动以为后为0001 0011(1+2+0+0+16+0+0+0=19)。所以结果为19.
(注:本人能力不高,如果有不对的地方还望见谅)
JAVA位运算符
运算符 含义 示例
~ 按位非(NOT) b = ~a
按位与(AND) c = a b
| 按位或(OR) c = a | b
^ 按位异或(XOR) c = a ^ b
右移 b = a 2
右移,左边空出的位以0填充 b = a 2
左移 b = a 1
当然同样有 =,|=,^=,=,=,=。
有关这些操作的细节可以参看
位运算
前面介绍的各种运算都是以字节作为最基本位进行的。 但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。
一、位运算符C语言提供了六种位运算符:
按位与
| 按位或
^ 按位异或
~ 取反
左移
右移
1. 按位与运算 按位与运算符""是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:95可写算式如下: 00001001 (9的二进制补码)00000101 (5的二进制补码) 00000001 (1的二进制补码)可见95=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=ab;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
3. 按位异或运算 按位异或运算符“^”是双目运算符。
java中的位运算
首先,运算符优先级 + 大于 大于 ^ 大于 |
不清楚的可以百度运算符优先级
n + 1 = 111001
n + 2 = 111010
n + 3 = 111011
n n+1 = 111000 111001 = 111000 // 相同位置 1 1 为 1,其他为 0
n+2 ^ n+3 = 111010 ^ 111011 = 000001 // 相同位置 1 1 为 0 , 0 0 为 0 , 0 1 为 1
111000 | 000001 = 111001 // 相同位置 除了 0 0 为 0之外 ,其他都为 1
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位置运算和java按位运算的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-25,除非注明,否则均为
原创文章,转载请注明出处。