Java I/O : Bit Operation 位运算

一、Bit与二进制

什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的“细胞”,要谨记。

而二进制,只是计算界一种规范和约定,准确的说是一种数制。念叨着“逢二进一”,这其实是一种算法。如图

二、位运算

说完了前面两点,泥瓦匠带你走向位运算的概念。数在内存中以二进制存储。位运算,也就是二进制运算,其实就是对数在内存的二进制直接操作的过程。这里有人发问了,

Q:都是1+1,位运算不见得结果不同吧。

A:这个问得好。位运算在常见的场景下是凸显不了好处的。而在特定下,一者计算方便,速度快,支持面广。比如我举几个例子,可以利用位运算判断值的奇数偶数,还有某些特定的算法比如压缩,加密算法严重依赖位算法。二者其存储字节小,比如在文件的权限(读,写等)都是用位来表示的。

上面,用小对话形式和举例一起说明了位运算。下面开始实战。

 

三、操作符实战

一、位运算与 & { 两位全1,结果才为1 } 如图:

作用

① 清零。如果特定段位需要清0,则其他段与各位为0 与运算即可。0xFF & … 可以使靠右8位的其他都清0

② 取一个数中的指定位。1010 1110 & 0xF 可以获得 1010 1110的低4位。

 

二、位运算或 | { 只要有个1,结果就为1 } 如图:

作用:用于补1,哪里需要1就补哪里。

 

三、异或运算 ^{ 两个响应位不同,则为1 }

作用: 特定位翻转 1010 1110 ^ 0xF = 1010 0001

 

四、移位运算 左移和右移

” < <” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。如图:

右移就不重复了。

 

这里再增加一个解决上面泥瓦匠提到的怎么判断奇数偶数。


1

2

3

4

// Is it odd?

(value & 0x1) > 0

// Is it divisible by two (even)?

(value & 0x1) == 0

 

四、总结

Bit 位虽小但是基石,滴水穿石。水滴-位,值得我们好好了解。这里复杂的压缩算法这些,以后写到算法再说。

要点:

概念

操作符运算

时间: 2024-08-31 05:26:42

Java I/O : Bit Operation 位运算的相关文章

关于农夫过河的问题, 位运算???

问题描述 农夫过河在网上找的java代码,用的是位运算,太神奇了,完全看不懂,耗一天了,只能到这来求助了.packagecom.itheima.test;importjava.util.LinkedList;publicclassTest17{int[]route=newint[16];intnongfu(intlocation){if((location&0x08)!=0)return1;elsereturn0;}intlang(intlocation){if((location&0x0

Java千百问_03基本语法(005)_二进制是怎样做位运算的

二进制是怎样做位运算的 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作.其他运算符看这里:java种的运算符都有哪些 大部分运算流程都是先将整数转换为二进制,然后进行相应二进制操作.常见的操作有如下几种: 下面我们详细说明,运算符的优先级看这里:java运算符的优先级是怎样的 1.按位与 and 两个二进制数进行按位与操作:相同位的两个数字都为1,则为1:若有一个不为1,则为0. 例如:00101 & 11100 = 00100 通常

[大数据量]java移位运算与位运算与数据类型的存储

站在巨人的肩膀上,参考其他博客文章,汇总于此:  1G=1024M=1024K=1024BYTE=8BIT  Java数据类型的存储:(举例说明) 问:int 型的在内存中怎么存储,假设 int a=21:那么a是怎么被存到计算机里的.怎样把 a 变成二进制数. 怎么样把 a 存到 byte[]数组中? 答:int占4个字节,byte是1个字节,每个字节8位. 所以2进制的话,int最多可以表示正负一共2的32次方个数,byte则是2的8次方. e.g. int=21;在计算机中表示为00000

java位运算&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;负位运算

问题描述 java位运算>>>负位运算 请教大神 -100 >>> -1 -100 >>> 1 如何计算的 解决方案 [负数最高位为1,正数为0] [-10转换为二进制数: 10转为2进制数--> 1010 --求反--> 0101 --加1--> 0110 --补位--> 1***1 0110 -10转换为二进制数:11111111111111111111111111111111111111111111111111111111

java 简单的位运算

问题描述 java 简单的位运算 int i=0xaabbccdd : byte b1=0xdd: byte b2=0xcc: byte b3=0xbb: byte b4=0xaa: 使用位运算将i变为0xddccbbaa 解决方案 Java位运算Java位运算JAVA中的位运算 解决方案二: b1是不是0xdd? b1*16^6+b2*16^4+b3*16^2+b4

Java的位运算(bitwise operators)

Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << 左移位,在低位处补0 >> 右移位,若为正数则高位补0,若为负数则高位补1 >>> 无符号右移位,无论正负都在高位补0 & 与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0. | 或(OR),对两个整型操作数中对应位执行布尔代数,两个位

java位运算加密示例_java

创建一个类,通过位运算中的"^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的值进行异或运算,实现把加密后的字符串还原为原有字符串的值. 复制代码 代码如下: import java.util.Scanner;public class Example {    public static void main(String[] args) {        Scanner sc

Java位运算总结

  这是自己4年前的Java学习笔记,现发布在ITEye留作纪念,同时也希望对那些刚刚接触Java的童鞋们有些许帮助.              情如痕,缘似印,奈何情深缘浅海誓山盟空对月,流尽痴泪只为你我心再近,踏破情路惟愿红尘有你.                                                                                                                                    

代码-java 简单的位运算

问题描述 java 简单的位运算 用位运算将int i=0xaabbccdd 变成 i=0xddccbbaa,我不知道自己写的代码哪里错了,希望各位可以指出,谢谢 解决方案 Java 位运算java 位运算Java 中的位运算 解决方案二: a1错了,应该是左移6位,即 <<64 解决方案三: a3也错了,应该是左移2位,即 <<4 解决方案四: 这是用c++编写的,最简单的程序.记得负数右移,补的是符号位. 解决方案五: t = (t1<<24)|(t2<<