位运算符java(java位运算符详解)
本文目录
- java位运算符详解
- 【JAVA】请问位运算符在实际中具体到底有哪些实际用处
- JAVA里面的位运算符>>,<<,>>>是什么意思,请举个列子具体说明一下
- Java位运算符的问题,&不能进行int,float运算为什么
- java中位运算符,(byte) 0x80 的那个,为何答案是-32
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 当然同样有 &=,|=,^=,》》=,》》》=,《《=。 有关这些操作的细节可以参看 www.pcvc.net/...id=247 位运算 前面介绍的各种运算都是以字节作为最基本位进行的。 但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。 一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 《《 左移 》》 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。 main(){ int a=9,b=5,c; c=a&b 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】请问位运算符在实际中具体到底有哪些实际用处
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).
位运算符用来对二进制位进行操作,Java中提供了如下表所示的位运算符:位运算符中,除 ~ 以外,其余均为二元运算符。
操作数只能为整型和字符型数据。
3.4.1补码
Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:
对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1=11010110)
用补码来表示数,0的补码是唯一的,都为00000000。(而在原码,反码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可以用111111表示-1的补码(这也是补码与原码和反码的区别)。
3.4.2按位取反运算符~
~ 是一元运算法,对数据的每个二进制位取反,即把1变为0,把0变为1。
例如:
0010101
~
1101010
注意,~运算符与-运算符不同,~21≠-21。
3.4.3按位与运算符&
参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。即:
0&0=0,0&1=0,1&0=0,1&1=1
JAVA里面的位运算符>>,<<,>>>是什么意思,请举个列子具体说明一下
java 中: 》》带符号右移 (n》》2 将整型值带符号右移2位 ) 《《带符号左移 (n《《2 将整型值带符号左移2位 ) 》》》无符号右移 (n》》》2 将整型值无符号右移2位 ) 在32位系统中任何数左移(右移)32位还是它本身 例如:�6�1a=a<<2将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60(为简单起见,我们用8位二进制数表示十进制数15,如果用16位,结果是一样的)。高位左移后溢出,舍弃不起作用。左移1位相当于该数乘以2,左移2位相当于该数乘以22=4。上面举的例子15<<2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的高位中包含1。
Java位运算符的问题,&不能进行int,float运算为什么
首先说,为什么&不能进行int,float运算。&,按Java语言规范定义,是位操作符号,进行按位与运算。float为单精度浮点数,是无法同byte,char,short,int,long这些整数进行位运算的。同理,double也不可。这是因为,浮点数的二进制表示方式不同于整数。而整数,因为二进制表示方式一样,它们之间可以进行位运算。运算时,会按类型自动转型,规则是向位长的转。
java中位运算符,(byte) 0x80 的那个,为何答案是-32
0x80 表示 128,(0x 代表 16 进制,8 * 16¹ + 0 * 16º = 128),128 的二进制是 10000000,即 2 的 7 次方。byte 共有 8 位,表示范围是 -128 ~ 127,二进制即 10000000 ~ 01111111,第一位为符号位,1 表示负数,0 表示整数,11111111 即表示 -127,10000000 比较特殊,表示 -128。所以,0x80 本来是整数的 128,二进制 00000000000000000000000010000000 (Java 中整数4个字节32位)。(byte)0x80,将其转换为 byte,即截取最后 8 位,即 10000000,就是 byte 中的 -128。》》 表示右移操作,右移一位表示除以 2。(byte)0x80 》》 2,表示将(byte)0x80右移两位,那么就是 -128 ÷ 2 ÷ 2 = -32。
更多文章:
mysql怎么样(mysql社区版的稳定性与可靠性如何,是否有必要用oracle)
2024年6月21日 08:20
lesson one(lessonone维生素产品有质量问吗)
2024年7月31日 14:01
bootstrap4 网站后台模板(如何利用bootstrap框架开发后台)
2024年5月8日 16:28
网络代理ip地址和端口(什么叫代理服务器的ip地址,什么叫服务器的端口.)
2024年4月3日 06:01
goto官网(请高手帮忙鉴定一下该网站真伪,多谢了 http://www.gotoread.com)
2024年8月24日 00:00
c语言指针数组举例(谁发点C语言例子给我,关于数组和指针的)
2024年7月3日 14:03
personality traits(personality traits是什么意思)
2024年7月12日 06:08
cellspacing属性的作用(表格cellspacing属性)
2024年7月23日 22:16
button按钮属性(PYTHON3.7.2 button 修改属性)
2024年8月9日 17:35
python单继承和多继承(Python中的面向对象(高级)之私有方法、多继承、多态)
2024年9月28日 14:05