Qouson's blog Qouson's blog
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

qouson

Java界的小学生
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • git

  • linux

  • 设计模式

  • 数据结构与算法

  • 计算机基础

    • 计算机基础
      • 与,或,异或运算
        • (&)与运算
        • (|)或运算
        • (^)异或运算
      • 移位运算
        • 有符号左移 <<
        • 有符号右移 >>
        • 无符号右移 >>>
  • Java相关框架

  • 分布式

  • DDD领域驱动设计

  • 系统设计

  • DevOps

  • python

  • 杂乱无章

  • 更多
  • 计算机基础
qouson
2024-05-31
目录

计算机基础

# 计算机基础

# 与,或,异或运算

# (&)与运算

两个二进制数值如果在同一位上都是1,则结果中该位为1,否则为0 示例:

  1111   (10进制:15)
& 1011   (10进制:11)
--------------------
= 1011   (10进制:11)
1
2
3
4

# (|)或运算

两个二进制数值中只要有一个为1,则结果中该位为1,否则为0 示例

  1111   (10进制:15)
| 1011   (10进制:11)
--------------------
= 1111   (10进制:15)
1
2
3
4

# (^)异或运算

两个二进制数值如果在同一位上相同,则结果中该位为0,否则为1 示例

  1111   (10进制:15)
^ 1011   (10进制:11)
--------------------
= 0100   (10进制:4)
1
2
3
4

# 移位运算

# 有符号左移 <<

向左移动x位,无论正负数低位(最右边)都补x个0 示例:20 << 2

20的二进制(反码,补码):0001 0100   
         向左移动两位后:0101 0000
                  结果:80
1
2
3

示例:-20 << 2

原码:1001 0100      // 找到20的二进制表示 0001 0100
反码:1110 1011      // 符号位不变,其他位全部取反
补码:1110 1100      // 反码+1
左移两位后:1011 0000
反码:1010 1111      // 在右移动后的补上上1
原码:1101 0000      // 除符号位外,反码其他位全部取反
结果:-80
1
2
3
4
5
6
7

# 有符号右移 >>

向右移动x位,正数高位(最左边)补x个0,负数补x个1 示例: 20 >> 2

原码(反码,补码):00010100
右移两位(最左边两位添0)
原码(反码,补码):00000101
结果:5
1
2
3
4

示例:-20 >> 2

原码:10010100
反码:11101011    // 符号位不变,其他位取反
补码:11101100    // 反码 + 1
右移两位(最左边两位添1)
补码:11111011
反码:11111010    // 补码 - 1
原码:10000101    // 符号位不变,其他位取反
结果:-5
1
2
3
4
5
6
7
8

# 无符号右移 >>>

和>>类似,但不关注符号位,左侧全部补0 示例:2 >>> 1

原码(反码,补码):00000000 00000000 00000000 00000010
右移一位(最左边一位添0)
原码(反码,补码):00000000 00000000 00000000 00000001
结果:1
1
2
3
4

示例:-2 >>> 1

原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101  // 符号位不变,其他位取反
补码:11111111 11111111 11111111 11111110  // 反码 + 1
右移1位(无符号位运算符,最左边一位只添0)
补码:01111111 11111111 11111111 11111111
反码:01111111 11111111 11111111 11111111  // 高位为0,正数
原码:01111111 11111111 11111111 11111111  // 与反码相同
结果:2147483647
1
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2024/06/01, 00:32:42
反转链表
MyBatis

← 反转链表 MyBatis→

最近更新
01
杂乱无章
12-25
02
基础-大彬
11-14
03
集合-大彬
11-14
更多文章>
Theme by Vdoing | Copyright © 2023-2025 qouson
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式