Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • 数据结构

    • 位运算
      • 原码
      • 反码
      • 补码
      • 负数的最小值取负为多少
      • 打印二进制
    • 最基本的数据结构
    • 前缀和数组
    • random的随机行为
    • 对数器
    • 二分法查找
    • 方法参数传递是值还是引用
    • 链表
    • 位图
    • 位运算实现四则运算
    • 二叉树
    • 排序
    • 时间复杂度
    • 队列和栈
    • 递归
    • 堆(优先级队列)
    • 贪心
    • 并查集
    • 图
    • 从暴力递归到动态规划
    • 滑动窗口
    • 单调栈
    • 线段树
  • 数据结构与算法

  • 计算机组成原理

  • 操作系统

  • 408
  • 数据结构
Iekr
2021-09-02
目录

位运算

# 位运算

符号 描述 运算规则
& 与 两个位都为 1 时,结果才为 1
| 或 两个位都为 0 时,结果才为 0
^ 异或 两个位相同为 0,相异为 1
~ 取反 0 变 1,1 变 0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补 0
>> 右移 各二进位全部右移若干位,对无符号数,高位补 0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补 0(逻辑右移),Java 中为算术右移根据符合位来补(如为负数则补 1,正数补 0)
>>> 逻辑右移 各二进位全部右移若干位,对无符号数,高位补 0,有符号数

# 原码

原码就是符号位加上真值 以下以 8 位来实例

+1的原码为
0000 0001
-1的原码为
1000 0001
1
2
3
4

# 反码

正数的反码是其本身

负数的反码是在其原码的基础上,符号位不变,其余各个位取反

+1的反码为
0000 0001
-1的反码为
1111 1110
1
2
3
4

# 补码

通常一个数的二进制是以补码的形式展现

  1. 正数的补码就是其本身
  2. 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后 + 1. (即在反码的基础上 + 1)
+1的补码为
0000 0001
-1的补码为
1111 1111
1
2
3
4

# 负数的最小值取负为多少

即负数的最小值 取反 再 + 1

public static void main(String[] args) {
	int c = Integer.MIN_VALUE; 
	int d = -c;
	int e = ~c + 1;
	System.out.println(c); //-2147483648
	System.out.println(d); //-2147483648
	System.out.println(e); //-2147483648
    c = 0; 
	d = -c;
	e = ~c + 1;
	System.out.println(c); //0
	System.out.println(d); //0
	System.out.println(e); //0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 打印二进制

public static void print(int num) {
	for (int i = 31; i >=0; i--) {
        //把1左移n位 和原数做与运算 两者为1时输出1否则输出
		System.out.print((num & (1 << i)) == 0 ? "0" : "1");
	}
	System.out.println();
}
1
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
最基本的数据结构

最基本的数据结构→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式