抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 位运算 位运算应用

位运算 位运算应用

时间:2020-07-17 11:06:28

相关推荐

本页目录

位运算分为2个大类

逻辑位运算运算符为:&、|、^、~ 。分别读作:位与、位或、异或、按位取反位移位运算运算符为:<<、>>。分别读作:左移、右移

位于 &(一0则0)

将两个十进制数转为二进制,将此两个二进制转换为列竖式,运算时两个位数任意一个是0则此位是0,有1个1则是1。然后将结果转为十进制。

@Testvoid 位于() {System.out.println("12 转二进制是:" + Integer.toBinaryString(12));System.out.println("10 转二进制是:" + Integer.toBinaryString(10));System.out.println("12位于10 运算二进制结果是:1000");System.out.println("二进制的1000 转为十进制是:" + Integer.parseInt("1000", 2));System.out.println("12&10 -------------》 " + (12 & 10));}控制台:12 转二进制是:110010 转二进制是:101012位于10 运算二进制结果是:1000二进制的1000 转为十进制是:812&10 -------------》 8

位或| (双0则0)

将十进制数转为二进制,将2个二进制的数转换为列竖式,两个位数都是0,则此位是0,否则是1。然后将此结果转为10进制

@Testvoid 位或() {System.out.println("12 转二进制是:" + Integer.toBinaryString(12));System.out.println("10 转二进制是:" + Integer.toBinaryString(10));System.out.println("12位或10 运算二进制结果是:1110");System.out.println("二进制的1110 转为十进制是:" + Integer.parseInt("1110", 2));System.out.println("12|10 -------------》 " + (12 | 10));} 控制台结果:12 转二进制是:110010 转二进制是:101012位于10 运算二进制结果是:1110二进制的1000 转为十进制是:1412|10 -------------》 14

异或 ^(互异则1)

将十进制数转为二进制,将2个二进制的数转换为列竖式,两个位数不同时,则此位是1,否则是0。然后将此结果转为10进制

@Testvoid 异或() {System.out.println("12 转二进制是:" + Integer.toBinaryString(12));System.out.println("10 转二进制是:" + Integer.toBinaryString(10));System.out.println("12异或10 运算二进制结果是:0110");System.out.println("二进制的0110 转为十进制是:" + Integer.parseInt("0110", 2));System.out.println("12^10 -------------》 " + (12 ^ 10));}控制台结果:12 转二进制是:110010 转二进制是:101012位于10 运算二进制结果是:0110二进制的0110 转为十进制是:612^10 -------------》 6

利用异或可实现一个小面试题,如何不添加变量,实现数据的替换

int a = 123;int b = 456;// 操作a = a ^ b;b = a ^ b;a = a ^ b;// 完成

按位取反 ~

将十进制数转为二进制,将2个二进制的数转换为列竖式,

左移 <<(数值变大)

将十进制数转为二进制,原二进制向左移动X位,空位补0,然后将此结果转为10进制

@Testvoid 左移() {System.out.println("12 转二进制是 :" + Integer.toBinaryString(12));System.out.println("1100 向左移动3位后 空位补0位 :1100000");System.out.println("1100000 转为十进制是 :" + Integer.parseInt("1100000", 2));System.out.println("12 << 3 -------------》 " + (12 << 3));}控制台结果:12 转二进制是 :11001100 向左移动3位后 空位补0位 :11000001100000 转为十进制是 :9612 << 3 -------------》 96

右移 >>(数值变小)

将十进制数转为二进制,原二进制向右删除X位,然后将此结果转为10进制

@Testvoid 右移() {System.out.println("12 转二进制是 :" + Integer.toBinaryString(12));System.out.println("1100 向右移动3位后:1 (删除3位也就是删除110,只剩下1了。被删除的不补位)");System.out.println("1 转为十进制是:" + Integer.parseInt("1", 2));System.out.println("12 >> 3 -------------》 " + (12 >> 3));}控制台结果:12 转二进制是 :11001100 向右移动3位后:1 (删除3位也就是删除110,只剩下1了。被删除的不补位)1 转为十进制是:112 >> 3 -------------》 1

利用位运算表示状态

在Mysql我们可以利用字段来表示用户的某个属性或状态,但是如果用户有大量的状态,就会出现大量字段产生。如果不想数据表存在大量的数据,我们可以使用位运算,用一个数字的字段表示用户的状态。

思路:定义一个字段 数字类型 其数字表示了用户的多个状态!

检测是否有状态 (oldStatus & someStatus) == someStatus添加状态 oldStatus = oldStatus | newStatus删除状态 oldStatus = oldStatus ^ newStatus

代码实现

// 本代码有 查询、添加、删除状态@Testvoid 位运算实现变量多状态() {// 定义用户当前状态值int userStatus = 15;System.out.println("初始化状态:" + userStatus + " 转为十进制是:" + Integer.toBinaryString(userStatus));// 定义一些所有的可能性状态,自己的需求按需添加即可 本次定义依次是:无性别、男性、女性、未实名、已实名int noSex = 1 << 0;// 1int man = 1 << 1; // 2int woman = 1 << 2;// 4int unName = 1 << 3; // 8int named = 1 << 4;// 16// 打印初始化状态System.out.print("初始化信息:");System.out.println(checkAllInfo(userStatus));// 添加一个已实名状态userStatus = userStatus | named;System.out.print("添加后的结果:");System.out.println(checkAllInfo(userStatus));// 删除无性别状态userStatus = userStatus ^ noSex;System.out.print("删除后的结果:");System.out.println(checkAllInfo(userStatus));}public static String checkAllInfo(int userStatus) {// 定义一些所有的可能性 如无性别、男性、女性、未实名、已实名int noSex = 1 << 0;// 1int man = 1 << 1; // 2int woman = 1 << 2;// 4int unName = 1 << 3; // 8int named = 1 << 4;// 16StringBuilder info = new StringBuilder();if ((userStatus & noSex) == noSex) {info.append("无性别 ");}if ((userStatus & man) == man) {info.append("男性 ");}if ((userStatus & woman) == woman) {info.append("女性 ");}if ((userStatus & unName) == unName) {info.append("未实名 ");}if ((userStatus & named) == named) {info.append("已实名");}return info.toString();}

控制台结果

初始化状态:15 转为十进制是:1111初始化信息:无性别 男性 女性 未实名 添加后的结果:无性别 男性 女性 未实名 已实名删除后的结果:男性 女性 未实名 已实名

特殊说明:以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!收_心 永久会员

如果觉得《位运算 位运算应用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。