• java运算符 与(&)、非(~)、或(|)、异或(^)


    1.位异或运算(^)

    运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。

    比如:8^11.

    8转为二进制是1000,11转为二进制是1011.从高位开始比较得到的是:0011.然后二进制转为十进制,就是Integer.parseInt("0011",2)=3;

    2.位与运算符(&)

    运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。

    比如:129&128.

    129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000000,即128.

    3.位或运算符(|)

    运算规则:两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。

    比如:129|128.

    129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000001,即129.

    4.位非运算符(~)

    运算规则:如果位为0,结果是1,如果位为1,结果是0.

    比如:~37

    在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit.

    8转为二进制是100101.

    补码后为: 00000000 00000000 00000000 00100101

    取反为:    11111111 11111111 11111111 11011010

    因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。

    因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:

    00000000 00000000 00000000 00100110,此时二进制转原码为38

    所以~37 = -38. 

    参考资料:

    http://blog.csdn.net/u010841296/article/details/52850307(java 原码、反码、补码计算 以及 取反(~)运算

    ========================================================================================== 我希望每一篇文章的背后,都能看到自己对于技术、对于生活的态度。 我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。 其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。 ==========================================================================================
  • 相关阅读:
    PHP时间戳常用转换
    redis基本指令
    P2501 [HAOI2006]数字序列
    P2679 子串
    P2759 奇怪的函数
    P6823 「EZEC-4」zrmpaul Loves Array
    P6631 [ZJOI2020] 序列
    P2887 [USACO07NOV]Sunscreen G
    P3287 [SCOI2014]方伯伯的玉米田
    拓展欧几里得算法揭秘
  • 原文地址:https://www.cnblogs.com/weihuang6620/p/9909104.html
Copyright © 2020-2023  润新知