资讯专栏INFORMATION COLUMN

java学习笔记-位运算

galaxy_robot / 2959人阅读

摘要:位运算符位运算符与逻辑运算符类似,但是位运算符是对每一位进行计算。上面说到的按位取反加,就可以写成移位运算符右移与无符号右移相似,是将整数所有的位向右移动位,抛弃个低位。空出来的低位用的最高位值补全。

定点数据再计算机中的表示方法

例如一个整数类型(int)的数据在内存中占用了32位。通俗的讲就是在内存中挖了32个坑,每一个坑里可以放一个0或者1.

00000000 11111111 00000000 11111111

32个坑,每一个坑有两种可能,那么总共就是2^32种可能。
整数既有正整数,又有负整数,还有一个零,那么分2^32分一半的可能(2^31)给负整数,分一种可能给0,还剩下2^31-1种可能给整整数。
这就是为啥整数类型(int)只能表示-2^31~2^31-1数值范围的整数了。

我们知道整数类型(int)中,正整数就可以标示成:

00000000 00000000 00000000 00000000   =>表示整数0;
00000000 00000000 00000000 00000001   =>表示整数1;
00000000 00000000 00000000 00000010   =>表示整数2;
....
00000000 00000000 11111111 11111111   =>表示整数2^31-1

那么负整数就可以标示成:

11111111 11111111 11111111 11111111  =>标示整数-1;
11111111 11111111 11111111 11111110  =>表示整数-2;
11111111 11111111 11111111 11111101  =>表示整数-3;
...
11111111 11111111 00000000 00000001  =>表示整数-2^31-1
11111111 11111111 00000000 00000000  =>表示整数-2^31

看到这里,像我一样聪明的小伙伴肯定可以看出正整数和其对应的负整数之间的关系:妈蛋,它们就是把正整数所有的0变成1,把1变成0,然后在加上1.
把正整数所有的0变成1,把1变成0,然后在加上1这是通俗的叫法,其实术语叫按位取反

位运算符&, |, ~, ^

位运算符与逻辑运算符类似,但是位运算符是对每一位进行计算。

op1[i] op2[i] op1[i]&op2[i] op1[i] | op2[i] op1[i]^op2[i] ~op1[i]
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 1 0

上面说到的按位取反加1,就可以写成:

     System.out.print(~10+1); //-10
移位运算符 >>, >>>, <<

右移>>与无符号右移>>>相似,
op1>>op2 是将整数op1所有的位向右移动op2位,抛弃op2个低位。空出来的高位用op1的最高位值补全。

op1>>>op2 是将整数op1所有的位向右移动op2位,抛弃op2个低位。空出来的高位用0的最高位值补全。

op1<

没有<<<哦,亲~~~

按位异或运算的性质
(a^b)^a = b

我们来取a和b的第i位剖析一下,a,b 总共四种可能:

a[i] b[i] a^b[i] a^b[i]
0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 1

可以发现(a^b)^a与a的值是一样的。
所以如果我们这么写的话:

a = a^b;
b = a^b; //b = (a^b)^b = a
a = a^b; // a = (a^b)^a = b

就能实现a、b交换数值。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66374.html

相关文章

  • Java各种数据类型,自己学习写的笔记!!!

    摘要:局部变量声明在函数内部的变量。在作用域范围内不能出现命名冲突。 java编程规范: 1.良好的标识符的命名 保留字不能作为标识符命名: class、public、static..., goto,const 区分大小写:helloWorld、HelloWorld 2.良好的注释习惯 3.良好的缩进:没遇到一个代码块缩进一次(一个tab键) 变量:代...

    stefanieliang 评论0 收藏0
  • java学习笔记- 运算

    摘要:中的运算符按功能划分主要分类。算术运算符的优先级浮点数比较在中,一般不建议直接比较两个浮点数是否相等。还有与二元运算符相结合的赋值运算符。与二元运算符相结合的赋值运算符有其运算即为先两者进行二元操作再赋值给前者。 java中的运算符按功能划分主要分7类。 算术运算符 +, -, *, /, ++, --, % 关系运算符 =, ==, != 布尔逻辑运算符 &&, &, |...

    JellyBool 评论0 收藏0
  • java程序员的c语言学习笔记,一文快速了解

    摘要:结构体也可以包含结构体,就像内部类访问结构的属性和一样。。我觉得这个需要学下数据结构才能更好理解给数据类型起一个新名字则可以通过对于结构体我可以这样再通过变量名就可以简便的声明结构体变量。文件暂时过了一遍预处理器头文件就是扩展名为的文件。 ...

    FuisonDesign 评论0 收藏0
  • Java学习笔记2-基本数据类型

    摘要:对象数组都是引用数据类型。低高数据类型转换必须满足如下规则不能对类型进行类型转换。强制类型转换条件是转换的数据类型必须是兼容的。声明变量的基本格式如下格式说明为数据类型。但为了对类的使用者可见,大多数静态变量声明为类型。 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,...

    ThinkSNS 评论0 收藏0
  • Java核心技术笔记 语言基础

    摘要:变量声明变量变量名规则字母开头,由字母或数字构成的序列,中的字母包括或者某种语言中代表字母的任何字符,数字包括或者某种语言中代表数字的任何字符。删除原始字符串头部和尾部空格。中断控制流程,使用在和循环中,用于提前中断循环。 《Java核心技术 卷Ⅰ》 第3章 Java 的基本程序设计结构 一些规则 类命名:CamelCase 驼峰命名法,以及必须是字母开头,后面跟字母和数字的任意组合...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<