按位与,按位或,按位异或,按位取反
来源:互联网 发布:四川大学自考网络班 编辑:程序博客网 时间:2024/05/16 14:11
转载请注明出处:http://blog.csdn.net/droyon/article/details/9335537
一、按位与
运算规则:1&1=1,1&0=0,0&1=0;
用途:清零,取指定位
int i=7;//0000 0000 0000 0000 0000 0000 0000 0111int j=5;//0000 0000 0000 0000 0000 0000 0000 0101int m=-7;//1000 0000 0000 0000 0000 0000 0000 0111int n=-5;//1000 0000 0000 0000 0000 0000 0000 0101//按位与System.out.println("按位与操作----i(7)&j(5)=?--------------------------");System.out.println("//0000 0000 0000 0000 0000 0000 0000 0111\n"+ "//&\n"+ "//0000 0000 0000 0000 0000 0000 0000 0101\n"+ " = \n"+ "//0000 0000 0000 0000 0000 0000 0000 0101 = 5");System.out.println("按位与操作结果:"+(i&j));System.out.println("按位与操作----m(-7)&n(-5)?--------------------------");System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111\n"+ "//&\n"+ "//1000 0000 0000 0000 0000 0000 0000 0101\n"+ "//补码:\n"+ "//1111 1111 1111 1111 1111 1111 1111 1001\n"+ "//&\n"+ "//1111 1111 1111 1111 1111 1111 1111 1011\n"+ " = \n"+ "//1111 1111 1111 1111 1111 1111 1111 1001(补码)\n"+ "//1000 0000 0000 0000 0000 0000 0000 0111 = -7(原码)");System.out.println("按位与操作结果:"+(m&n));System.out.println("*****************************************************************************\n");
运算结果:
按位与操作----i(7)&j(5)=?--------------------------//0000 0000 0000 0000 0000 0000 0000 0111//&//0000 0000 0000 0000 0000 0000 0000 0101 = //0000 0000 0000 0000 0000 0000 0000 0101 = 5按位与操作结果:5按位与操作----m(-7)&n(-5)?--------------------------//1000 0000 0000 0000 0000 0000 0000 0111//&//1000 0000 0000 0000 0000 0000 0000 0101//补码://1111 1111 1111 1111 1111 1111 1111 1001//&//1111 1111 1111 1111 1111 1111 1111 1011 = //1111 1111 1111 1111 1111 1111 1111 1001(补码)//1000 0000 0000 0000 0000 0000 0000 0111 = -7(原码)按位与操作结果:-7*****************************************************************************
二、按位或
运算规则:0|1=1,0|0=0,1|0 = 1,1|1=1
用途:给位置1.
//按位或System.out.println("按位或操作----i(7)|j(5)=?--------------------------");System.out.println("//0000 0000 0000 0000 0000 0000 0000 0111\n"+ "//|\n"+ "//0000 0000 0000 0000 0000 0000 0000 0101\n"+ " = \n"+ "//0000 0000 0000 0000 0000 0000 0000 0111 = 7");System.out.println("按位或操作结果:"+(i|j));System.out.println("按位或操作----m(-7)|n(-5)?--------------------------");System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111\n"+ "//|\n"+ "//1000 0000 0000 0000 0000 0000 0000 0101\n"+ "//补码:\n"+ "//1111 1111 1111 1111 1111 1111 1111 1001\n"+ "//|\n"+ "//1111 1111 1111 1111 1111 1111 1111 1011\n"+ " = \n"+ "//1111 1111 1111 1111 1111 1111 1111 1011(补码)\n"+ "//1000 0000 0000 0000 0000 0000 0000 0101 = -5(原码)");System.out.println("按位或操作结果:"+(m|n));System.out.println("*****************************************************************************\n");
运算结果:
按位或操作----i(7)|j(5)=?--------------------------//0000 0000 0000 0000 0000 0000 0000 0111//|//0000 0000 0000 0000 0000 0000 0000 0101 = //0000 0000 0000 0000 0000 0000 0000 0111 = 7按位或操作结果:7按位或操作----m(-7)|n(-5)?--------------------------//1000 0000 0000 0000 0000 0000 0000 0111//|//1000 0000 0000 0000 0000 0000 0000 0101//补码://1111 1111 1111 1111 1111 1111 1111 1001//|//1111 1111 1111 1111 1111 1111 1111 1011 = //1111 1111 1111 1111 1111 1111 1111 1011(补码)//1000 0000 0000 0000 0000 0000 0000 0101 = -5(原码)按位或操作结果:-5*****************************************************************************
三、按位异或
运算规则:0&0=0,0&1=1,1&0=1,1&1=0
用途:特定位反转,两数交换
//按位异或System.out.println("按位异或操作----i(7)^j(5)=?--------------------------");System.out.println("//0000 0000 0000 0000 0000 0000 0000 0111\n"+ "//|\n"+ "//0000 0000 0000 0000 0000 0000 0000 0101\n"+ " = \n"+ "//0000 0000 0000 0000 0000 0000 0000 0010 = 2");System.out.println("按位异或操作结果:"+(i^j));System.out.println("按位异或操作----m(-7)^n(-5)?--------------------------");System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111\n"+ "//^\n"+ "//1000 0000 0000 0000 0000 0000 0000 0101\n"+ "//补码:\n"+ "//1111 1111 1111 1111 1111 1111 1111 1001\n"+ "//^\n"+ "//1111 1111 1111 1111 1111 1111 1111 1011\n"+ " = \n"+ "//0000 0000 0000 0000 0000 0000 0000 0010(补码)\n"+ "//0000 0000 0000 0000 0000 0000 0000 0010 = 2(原码)");System.out.println("按位异或操作结果:"+(m^n));System.out.println("按位操作可以进行两个数值的交换");int a = m;int b = n;System.out.println("a,b的初始值:a="+a+",b="+b);a=a^b;b=a^b;a=a^b;System.out.println("a,b的操作值:a="+a+",b="+b);System.out.println("*****************************************************************************\n");
运行结果:
按位异或操作----i(7)^j(5)=?--------------------------//0000 0000 0000 0000 0000 0000 0000 0111//|//0000 0000 0000 0000 0000 0000 0000 0101 = //0000 0000 0000 0000 0000 0000 0000 0010 = 2按位异或操作结果:2按位异或操作----m(-7)^n(-5)?--------------------------//1000 0000 0000 0000 0000 0000 0000 0111//^//1000 0000 0000 0000 0000 0000 0000 0101//补码://1111 1111 1111 1111 1111 1111 1111 1001//^//1111 1111 1111 1111 1111 1111 1111 1011 = //0000 0000 0000 0000 0000 0000 0000 0010(补码)//0000 0000 0000 0000 0000 0000 0000 0010 = 2(原码)按位异或操作结果:2按位操作可以进行两个数值的交换a,b的初始值:a=-7,b=-5a,b的操作值:a=-5,b=-7*****************************************************************************
四、按位取反
运算规则:~0=1,~1=0;
用途:移除标志位。
//按位取反System.out.println("按位取反操作----~i=?--------------------------");System.out.println("//~\n"+ "//0000 0000 0000 0000 0000 0000 0000 0111\n"+ " = \n"+ "//1111 1111 1111 1111 1111 1111 1111 1000(补码)\n"+ "//1000 0000 0000 0000 0000 0000 0000 1000 = -8(原码)");System.out.println("按位取反操作结果:"+(~i));System.out.println("按位取反操作----~m?--------------------------");System.out.println("//1000 0000 0000 0000 0000 0000 0000 0111\n"+ "//补码:\n"+ "//1111 1111 1111 1111 1111 1111 1111 1001\n"+ "//~\n"+ "//1111 1111 1111 1111 1111 1111 1111 1001\n"+ " = \n"+ "//0000 0000 0000 0000 0000 0000 0000 0110\n(补码)\n"+ "//0000 0000 0000 0000 0000 0000 0000 0110 = 6(原码)");System.out.println("按位取反操作结果:"+(~m));System.out.println("正数i的取反等于(-i-1)");
运行结果:
按位取反操作----~i=?--------------------------//~//0000 0000 0000 0000 0000 0000 0000 0111 = //1111 1111 1111 1111 1111 1111 1111 1000(补码)//1000 0000 0000 0000 0000 0000 0000 1000 = -8(原码)按位取反操作结果:-8按位取反操作----~m?--------------------------//1000 0000 0000 0000 0000 0000 0000 0111//补码://1111 1111 1111 1111 1111 1111 1111 1001//~//1111 1111 1111 1111 1111 1111 1111 1001 = //0000 0000 0000 0000 0000 0000 0000 0110(补码)//0000 0000 0000 0000 0000 0000 0000 0110 = 6(原码)按位取反操作结果:6正数i的取反等于(-i-1)
按位取反,可以配合&和|,进行状态的增加和移除。http://blog.csdn.net/hailushijie/article/details/8675820
五、掩码:
掩码0x00ff
用途:
1、取出某些位。
例如:取出低八位
int a = 0x1234;int b = (a& 0x00ff);
2、特定位置0。
b = a & ~0x00ff;
3、特定为置1。
b = a|0x00ff;
六、异或性质:
1、任何数和自己异或结果为零。
2、任何数和0做异或值不变,和1异或结果为原操作数取反。
3、位运算a1^a2^...a^n = 1,那么a1.. .. an中1的个数为奇数。
4、x^x^y = y。 验证:由于x^x = 0,0 ^y = y,故上式成立。应用请参照上文按位异或中两数交换的例子
- 按位与,按位或,按位异或,按位取反
- 位运算-按位与,按位或,按位异或
- 按位与 按位或 按位异或 运算
- 按位与 按位或 按位异或 运算
- 按位与,按位或,按位异或
- &按位与 | 按位或 ^ 按位异或
- 按位与&,按位或|,按位异或^
- 位与& 按位或| 按位异或^ 运算
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位与、按位异或、按位取反
- 按位异或/按位或
- 利用数学知识快速理解按位与& 按位或| 按位异或^ 按位取反~
- 按位与、按位或
- so库链接和符号表的问题
- sql plsql
- hdu 2063 过山车(二分图最大匹配,2级)
- NDK CRUSH DUMP
- 搭建Mac下cocos2d-x的Android开发环境中遇到的问题
- 按位与,按位或,按位异或,按位取反
- oracle查看表空间以及对应数据文件
- socket INADDR_ANY 监听0.0.0.0地址 socket只绑定端口让路由表决定传到哪个ip
- AGG绘图库编译方法
- Jsoup-简单优雅的HTML dom解析工具
- UDP boost::asio的实现
- /proc/kallsyms
- ubuntu 配制 eclipse PHP 开发环境
- iPhone delegate 两界面传递数据(转)