位运算笔记

来源:互联网 发布:centos本地安装httpd 编辑:程序博客网 时间:2024/06/07 06:58

10—>1010

12-->1100
&与
例如:以下按位比较,当两个同时为1则为1,否则为0
10—>1010
12-->1100
结果为:
8-->1000


|或
例如:以下按位比较,当两个有任何一个为1则为1,否则为0
10—>1010
12-->1100
结果为:
14-->1110


^非
例如:以下按位比较,当两个数不同时则为1否则为0。
10—>1010
12-->1100
结果为:
6-->0110

在32的机器上
// 00000000 00000000 00000000 00000101 这是5// 11111111 11111111 11111111 11111010 这是5取反的结果-6// ~是取反:{二进制位取反}System.out.println(Integer.toString(5, 2));System.out.println("-5取反:" + ~-5+"|规律:当前数+1在 在变为正数值或负数,如:-5+1=abs(-4)=4");System.out.println("5取反:" + ~5+"|规律:当前数+1在 在变为正数值或负数,如:5+1=-6");




// >>>1 相当于 num/2(n) 无符号右移
// >>1 相当于 num/2(n)
// <<1 相当于 num*2(n)

System.out.println(111 >> 2);//27
System.out.println(300 >>> 1);//150

System.out.println(111 << 1);//222

十进制,二进制互转实现思路

/** * 二进制转换十进制 -只用户来便于掌握转换规律 * 该方法只能准换简单的正数值 *  * @param str * @return */public static int binary_algorism(String str) {int total = 0;for (int i = str.length() - 1, index = 0; i >= 0; i--, index++) {int n = Integer.parseInt(str.substring(i, i + 1));if (n != 0) {int x = n * 2;int y = 0;if (index == 0 && x == 2) {total += 1;} else if (index == 1) {total += x;} else {y = 2 * 2;for (int j = 0; j < index - 2; j++) {y *= 2;}total += y;}}}return total;}/** * 十进制转换二进制-只用户来便于掌握转换规律 * 该方法只能准换简单的正数值 * @param num * @return */public static String algorism_binary(int num) {StringBuilder builder = new StringBuilder();while (num > 0) {int temp = num / 2;if (num % 2 == 0) {builder.append("0");} else {builder.append("1");}num = temp;}String str = "";for (int i = builder.length() - 1; i >= 0; i--) {str += builder.toString().substring(i, i + 1);}return str;}



原创粉丝点击