位运算符
2016-05-09 17:18
260 查看
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
计算机表示出来的是原码,在内存中参与计算的是补码。
任何二进制位和0进行&运算,结果是0;和1进行&运算结果是原值。(有0则0)
int a=10;
int b=20;
System.out.println(a&b);
* a=10 的二进制是:00000000 00000000 00000000 00001010
* b=20 的二进制是:00000000 00000000 00000000 00010100
* 00000000 00000000 00000000 00001010
* &
* 00000000 00000000 00000000 00010100
* -------------------------------------------
* 00000000 00000000 00000000 00000000
* 结果是:0
任何二进制位和0进行 | 运算,结果是原值;和1进行 | 运算结果是1。(有1则1)
任何相同二进制位进行 ^ 运算,结果是0;不相同二进制位 ^ 运算结果是1。(相同则0,不同则1)
二进制位进行 ~ 运算 ,1变0,0变1
被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,最高位补1。
被
4000
移位二进制最高位无论是0或者是1,空缺位都用0补。
反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
计算机表示出来的是原码,在内存中参与计算的是补码。
位运算符 | ||
运算符 | 运算 | 范例 |
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = 1 --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 反码 | ~6 = -7 |
1. 按位与运算&
任何二进制位和0进行&运算,结果是0;和1进行&运算结果是原值。(有0则0)int a=10;
int b=20;
System.out.println(a&b);
* a=10 的二进制是:00000000 00000000 00000000 00001010
* b=20 的二进制是:00000000 00000000 00000000 00010100
* 00000000 00000000 00000000 00001010
* &
* 00000000 00000000 00000000 00010100
* -------------------------------------------
* 00000000 00000000 00000000 00000000
* 结果是:0
2. 按位或运算|
任何二进制位和0进行 | 运算,结果是原值;和1进行 | 运算结果是1。(有1则1)int a=10; int b=20; System.out.println(a|b); * a=10 的二进制是:00000000 00000000 00000000 00001010 * * b=20 的二进制是:00000000 00000000 00000000 00010100 * * 00000000 00000000 00000000 00001010 * | * 00000000 00000000 00000000 00010100 * ------------------------------------------- * 00000000 00000000 00000000 00011110 * 结果是: 30
3.按位异或运算 ^
任何相同二进制位进行 ^ 运算,结果是0;不相同二进制位 ^ 运算结果是1。(相同则0,不同则1)int a=10; int b=20; System.out.println(a^b); * a=10 的二进制是:00000000 00000000 00000000 00001010 * * b=20 的二进制是:00000000 00000000 00000000 00010100 * * 00000000 00000000 00000000 00001010 * ^ * 00000000 00000000 00000000 00010100 * ------------------------------------------- * 00000000 00000000 00000000 00011110 * 结果是: 30
4. 求反运算~
二进制位进行 ~ 运算 ,1变0,0变1int a=10; System.out.println(~a); * 00000000 00000000 00000000 00001010 * ~ * ------------------------------------------- * 11111111 11111111 11111111 11110101 补码 * 11111111 11111111 11111111 11110100 反码 * 10000000 00000000 00000000 00001011 原码 * 结果是:10
5. 左移运算<<
空位补0,被移除的高位丢弃。
int a=3<<4; System.out.println(a); /*把3的二进制位向左移动4位 * 00000000 00000000 00000000 00000011 * (0000)0000 00000000 00000000 00000011(0000) * 二进制结果:00110000 转换成十进制结果: 48
int e=-5<<4; System.out.println(e); /*把-5向左移动4位 * 10000000 00000000 00000000 00000101 原码 * 11111111 11111111 11111111 11111010 反码 * 11111111 11111111 11111111 11111011 补码 * 11111111 11111111 11111111 11111011(0000) * 1111 11111111 11111111 111110110000 补码 * 1111 11111111 11111111 111110101111 反码 * 1000 00000000 00000000 000001010000 原码 * 十进制结果-80 */
6. 右移运算>>
被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,最高位补1。int b=5>>4; /*把5的二进制位向右移动4位 * 00000000 00000000 00000000 00000101 * (0000)00000000 00000000 00000000 0000(0101) 结果是:0
int d=-5>>4; System.out.println(d); /*把-5向右移动4位 * 10000000 00000000 00000000 00000101 原码 * 11111111 11111111 11111111 11111010 反码 * 11111111 11111111 11111111 11111011 补码 * 111111111111 11111111 11111111 1111(1011) * 111111111111 11111111 11111111 1111 补码 * 111111111111 11111111 11111111 1110 反码 * 100000000000 00000000 00000000 0001 原码 * 十进制结果-1 */
7. 无符号右移>>>
被4000
移位二进制最高位无论是0或者是1,空缺位都用0补。
int b=5>>>4; /*把5的二进制位向右移动4位 * 00000000 00000000 00000000 00000101 * (0000)00000000 00000000 00000000 0000(0101) 结果是:0
计算出24的二进制:11000 :-24 >>> 2 原码:10000000 00000000 00000000 00011000 反码:11111111 11111111 11111111 11100111 补码:11111111 11111111 11111111 11101000 11111111 11111111 11111111 11101000 0011111111 11111111 11111111 111010(00)
相关文章推荐
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
- Java中的位运算符、移位运算详细介绍
- C语言位运算符详解
- 位运算符
- 关于移位运算符的知识点
- 黑马程序员-位运算符
- 黑马程序员——C基础之位运算符
- 位运算符的注意事项
- &和&&的区别,逻辑运算符和位运算符
- 巧用位操作符之——^异或运算符
- C 【位运算符 & | ^ ~ << >>】
- 位运算符的计算
- C程序设计课程-第七堂课后预习
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java编程(位运算符)
- 位运算符
- 位运算符
- 编程语言中的二进制和位运算符
- 【概念解析三】位运算符 和 逻辑运算符
- 七种位运算符和一种三元运算符