写点什么

位运算——Java 语言描述

作者:Cipher
  • 2022 年 5 月 06 日
  • 本文字数:710 字

    阅读完需:约 2 分钟

如何打印一个二进制数?

		public static void print(int num) {        for (int i = 31; i >= 0; i--) {            System.out.print((num & (1 << i)) == 0 ? "0" : "1");        }        System.out.println();    }
复制代码


int 32 位 0~2^31-1,真正表示的范围实际上是从 0~2^30

原因:int 型既可以表示正数,也可以表示负数

符号位:如果符号位为 0,一定是一个非负数,如果符号为 1,那么代表你绝逼是一个负数


左移:乘 2 的操作

int num = 12121212;print(num);//左移 *2的效果print(num << 1);print(num << 2);
复制代码


负数:在 Java 中的范围是 -2^31

 int am = Integer.MIN_VALUE; print(am);
复制代码

那么怎么算的负数呢?

我们先来打印一个-1

print(-1);
复制代码


发现全部都是 1,首先符号位代表你这是一个负数,然后说明,负级把后面的全部状态都进行取反的操作,最后在加 1,10000……1,-000000……1.就是-1


为什么要进行取反+1 的操作,而不是直接存储? 正数,直接就用它裸的这个值进行计算 负数,使符号位能与有效值部分一起参加运算,从而简化运算规则。


右移:除以 2 的操作

在 Java 中有俩个右移操作一个是>>,另一个是>>>

 				int d = 1024;        print(d);        //右移除2,最左侧用符号位来补充        print(d >> 1);//带符号右移        int e = Integer.MIN_VALUE;        print(e >> 1);//带符号位右移,出现俩个1        print(e >>> 1);//不带符号位右移        //系统最小取反+1后还是它自己        print(am);        print((~am + 1));
复制代码

值得注意的是系统最小取反+1 还是它自己,当你要使用最小值的时候,也就是应该换用 long 类型的时候了


应用,(~a+1)就是 a 的相反数

int a = 5;print(a);//5print(~a+1);//-5
复制代码


发布于: 刚刚阅读数: 3
用户头像

Cipher

关注

还未添加个人签名 2021.10.19 加入

还未添加个人简介

评论

发布
暂无评论
位运算——Java语言描述_位运算_Cipher_InfoQ写作社区