美文网首页
位运算符

位运算符

作者: lj72808up | 来源:发表于2019-11-02 01:39 被阅读0次

1. 负数的表示

负数表示为: 对应的正数, 先取反, 再加1

-1的表示: 
    1. 1表示为:  0000 0000 0000 0000 0000 0000 0000 0001
    2. 各位取反: 1111 1111 1111 1111 1111 1111 1111 1110
    3. 取反+1:   1111 1111 1111 1111 1111 1111 1111 1111
int a = -1;
int b = 0xffffffff;
System.out.println(b);  // -1

2. 带符号左移/右移 (<<>>), 无符号右移(>>>)

  • 左移: 只有<<, 无论正数还是负数, 低位都补0
  • 右移:
    • 对于负数, 有符号右移>>补1;
    • 对于正数, 有符号右移>>补0;
    • 无符号右移>>>, 无论正数或负数, 都补0
int c = -1;  // 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println( c<<1 ); // -2
System.out.println( 0xfffffffe );  // -2 (1111 1111 1111 1111 1111 1111 1111 1110)

System.out.println( c>>1 ); // -1   "1111 1111 1111 1111 1111 1111 1111 1111"高位补1

System.out.println( c>>>1 );   //2147483647  "0111 1111 1111 1111 1111 1111 1111 1111"高位补0
System.out.println(0x7fffffff);//2147483647

3. 诸位取反~

int a = 1;  // 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(~a); // 所有位取反: "1111 1111 1111 1111 1111 1111 1111 1110", -2
System.out.println(0xfffffffe);

3. 异或^

  1. 法则:
  • 诸位相比, 相同得0, 不同得1;
    • 0异或任何数 = 任何数
      • 由此推断出: 数a两次异或同一个数b(a=abb)仍然为原值a.
    • 任何数异或自己 = 0
      • 由上面两条推断出: 1^0=1,1^1=0
  • 因此, ^可类比于诸位的无进位加法
1^1 = 0 , 1^0 = 0 , 0^0=0 
  1. 异或的运用
    1. 实现将一个数的某一位翻转: 比如让数a的第n位翻转, 可以用a^(1<<n-1)
    int a = 0x73;  // 0111 0011
    //将a的第3位翻转
    int b = a^(1<<2);
    System.out.println(b);  //119
    int a1 = 0x77 ; // 0111 0111
    System.out.println(a1); //119
    
    1. 交换2个数
    int a = 0x73;  // 0111 0011
    int b = 0x70;  // 0111 0000
    System.out.println(a);  // 115
    System.out.println(b);  // 112
    
    a = a^b;
    b = b^a;
    a = a^b;
    
    System.out.println(a);  // 112
    System.out.println(b);  // 115
    
    1. 汇编语言中, 通常使用异或将一个数置0
    XOR a a
    
    1. 快速判断两个数是否相等
    return (a^b)==0
    

相关文章

  • 强大的位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作位取反运算符.png 位与运算符 位与运算符(&)可以...

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作 位与运算符 位与运算符(&)可以对两个数的比特位进行...

  • 基础运算符

    [使1. 按位与运算符(&](#1. 按位与运算符(&)[按位或运算符 | ](#2. 按位或运算符(|)) 1....

  • python学习第二天 基础知识二

    运算符 +、-、、/、//(整除)、*(幂运算符)、%(取余) 输出结果 位运算符 &位与,|位或,左移<<,右移...

  • 高级运算符(Advanced Operators)

    目录 [toc] 位运算符 1. 按位取反运算符~ 2. 按位与运算符& 3. 按位或运算符| 4. 按位异或运算...

  • python运算符

    Python算数运算符 Python比较运算符 Python赋值运算符 Python位运算符 按位运算符是把数字看...

  • 位运算符

    位取反运算符 取反翻运算符 ~ 是对所有位的数字进行取反操作0 变 11 变 0 位与运算符 位与运算符 & 可以...

  • Python基础之位运算符(含原码反码补码的通俗解释)

    目录 1 二进制 2 原码、反码、补码 3 位运算符 4 位运算符使用技巧 上回学习运算符时,漏了位运算符,因为位...

  • swift-位运算符

    1. 位取反运算符( ~ ) 位取反运算符(~ )是对所有位的数字进行取反操作 2. 位与运算符( &) 位与运算...

网友评论

      本文标题:位运算符

      本文链接:https://www.haomeiwen.com/subject/ficcbctx.html