一、取反
~=010101
二、原码
符号位(第一位):用0表示正数,用1表示负数
注意:
- 正数的原码 就是它在计算机中的表示。如12的原码和二进制表示
- 负数的原码和它在计算机中的表示不一样。负数的原码是对应的正数符号位取反,而负数在计算机中的表示是负数的补码。
三、补码
- 负数:对负数的原码来说,符号位不变,其他位取反加1
例子:-12的补码 ①-12对应正数12(0000 1100)→所有位取反(1111 0011)→+1(1111 0100) ②-12对应的负数-12的原码(1000 1100)→符号位不变,其他位取反(1111 0011)→+1(1111 0100)
讯享网
- 正数的补码是本身
讯享网计算负数时用到: 11-12 =11+(-12) =0000 1011+1111 0100(补码化) =1111 1111(竖式计算) =-1(补码化原码:减1,符号位不变,其他位取反)
四、带符号数据
带符号数据:1000 1010=-10
不带符号数据:1000 1010=138
五、位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符,是按照二进制格式来运算。
假设a = 60,b = 13;它们的二进制格式表示将如下:
A = 0011 1100
B = 0000 1101
| 操作符 |
描述 |
例子 |
| 与运算符(&) |
如果相对应位都是1,则结果为1,否则为0 |
(A&B)得到12,即0000 1100 |
| 或运算符(|) |
如果相对应位都是0,则结果为0,否则为1 |
(A | B)得到61,即 0011 1101 |
| 异或运算符(^) |
如果相对应位值相同,则结果为0,否则为1(异或,异才为1) |
(A ^ B)得到49,即 0011 0001 |
| 非与运算符(~) /按位取反运算符 |
翻转操作数的每一位,即0变成1,1变成0。 |
(〜A)得到-61,即1100 0011 |
| 左移运算符(<<) /按位左移运算符 |
左操作数按位左移右操作数指定的位数。低位补零 x<<y相当于x*2^y(x乘以2的y次方) |
A << 2得到240,即 1111 0000 |
| 有符号右移运算符(>>) (按位右移运算符) (算术右移运算符) |
左操作数按位右移右操作数指定的位数。低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。 x<<y相当于x/2^y(x除以2的y次方) |
A >> 2得到15即 0000 1111 |
| 无符号右移运算符(>>>) (按位右移补零操作符) (逻辑右移运算符) |
左操作数的值按右操作数指定的位数右移。低位移出(舍弃),高位的空位都补零。对于正数来说和带符号右移相同,对于负数来说不同,移动得到的空位以零填充。 |
|
//有符号右移运算符(>>)与无符号右移运算符(>>>)的代码: System.out.println(Integer.toBinaryString(4>>2)); System.out.println(Integer.toBinaryString(-4>>2)); //1 // System.out.println(Integer.toBinaryString(4>>>2)); System.out.println(Integer.toBinaryString(-4>>>2)); //1 //
PS:移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情
况下需要对右操作數模 64 )。例如, 1 «35 的值等同于 1 «3 或 8。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/46525.html