java个人学习笔记:位运算符

位运算是直接对二进制进行运算的。

<<  左移 3<<2 –> 3*2*2 像左移动两位。实则*2*2

3:        0000 0011

左移两位  0000 1100

>> 右移 3>>2 –> 3/2/2 实则/2/2

3:          0000 0011

右移两位   0000 0000

有符号的右移时候,最高位是0的用0补,最高位是1的用1补。

-3 >> 2

-3         1000 0000 0000 0000 0000 0000 0000 0011 原码 1111 1111 1111 1111 1111 1111 1111 1100反码 1111 1111 1111 1111 1111 1111 1111 1101 补码

右移两位  11 1111 1111 1111 1111 1111 1111 1111  11 (01丢失)补码 1111 1111 1111 1111 1111 1111 1111 1111  1110 反码 1000 0000 0000 0000 0000 0000 0000 0001 结果为-1

 

>>> 无符号的右移运算

-3 >>> 2

-3         1000 0000 0000 0000 0000 0000 0000 0011 原码 1111 1111 1111 1111 1111 1111 1111 1100 反码 1111 1111 1111 1111 1111 1111 1111 1101 补码

右移两位  00  1111 1111 1111 1111 1111 1111 1111  11 (01丢失)结果为1073741823

注意在java中 整数默认用int存储 所以是4字节。

 

&与运算          二进制码的与运算

|或运算、        二进制码的或运算

^异或运算       二进制码的异或运算

~反码           

 

12&5

12的原码(高位为0不写)

12   0000 1100

5     0000 0101

&     0000 0100

结果  4

 

12|5

12   0000 1100

5     0000 0101

|     0000 1101

结果 13

 

12^5

12   0000 1100

5     0000 0101

^    0000 1001

结果 9

 

~12

12   0000 0000 0000 0000 0000 0000 0000 1100

~    1111 1111 1111 1111 1111 1111 1111 0011 (符号位改变 负数补码)

      1111 1111 1111 1111 1111 1111 1111 0010 (反码)

      1000 0000 0000 0000 0000 0000 0000 1101 (原码)

结果:-13

 

int m =5;

int n = 3

m = m^n;

n = m^n;

m = m^n;

 

m = m^n

n = m ^ n = (m ^ n) ^n = m =5

m = m ^n = (m ^ n) ^n = n = 3

5    0000 0101  

3    0000 0011

^   0000 0110         6

3    0000 0011

^   0000 0101         5

时间: 2024-10-08 06:09:53

java个人学习笔记:位运算符的相关文章

Java学习笔记——位运算符、方法、package包、键盘输入

位运算符: a>>b = a左移b位 = a*2^2 右移舍去低位 方法: method,function,与c函数类似 package包: 通常第一句 写域名倒着写 package --; 主要包: java.lang 核心类string.math.Integer.System.Thread等 java.awt 构建管理GUI java.net 网络相关 java.io 输入输出 java.util 定义系统特性.使用与日期日历相关的函数 (详见api) 键盘输入: 使用别的包的类需要imp

Java基础学习笔记 -- 5(运算符)

运算符(赋值.算术.关系.逻辑.+连接.三目) 1)赋值运算符 = 在Java里面,采用等号(=)进行赋值运算,即把右边的值赋给左边的变量. 例如:    int a = 10;     String str = "abcd"; 扩展赋值运算符 +=.-=.*=./= 例如:    int a = 10;     a += 10;  ----> 即 a = a + 10; 2)算术运算符 +.-.*./.%.++.-- 前面的5种分别是加.减.乘.除.求余(取模)运算. 重点是后

javascript学习笔记---ECMAScript运算符(位运算符)

位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 位运算 NOT 位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一. 位运算 NOT 是三步的处理过程: 把运算数转换成 32 位数字 把二进制数转换成它的二进制反码 把二进制数转换成浮点数 例如: var iNum1 = 25; //25 等于 00000000000000000000000000011001 var iNum2 = ~iNum1; //转换为 11111111

Java学习笔记四——运算符

算术运算符 加减乘除(+.-.*./)就不说了. 求余运算符% 描述:第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数 注意:求余预算的结果不一定总是整数,当操作数是浮点数时,结果可能是小数. double a = 5.2; double b = 3.1; double mod = a%b; System.out.println(mod);//值为2.1 自增运算符++ 自增运算符++有两个要点: ++是单目运算符只能操作一个操作数 ++只能操作在数值型(整数.浮点型)的变量上

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

PHP学习笔记——3.运算符

目录: PHP学习笔记——1.变量 PHP学习笔记——2.常量 PHP学习笔记——3.运算符 1.算术运算符 + - * / %(求模) %:余数的正负值是由被除数决定的 2.比较运算符 == != > < >= <= === !== ===与!==比较的是变量的值和类型 注:在不同类型进行比较时 PHP会将前一个变量先转换成和后一个变量同一类型,再进行比较 布尔->字符串 true->'1' false->'' 字符串->数字 '123abc456'-&g

黑马程序员——c语言学习心得——位运算符

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补码方式出现. 例如:9&

黑马程序员——c语言学习心得——位运算符a

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h>void func(int n, char  str[ ][5] ){int i;for(i = 0; i < n; i++)  printf("/nstr[%d] = %s/n"

javascript学习笔记---ECMAScript运算符(逻辑运算符)

Boolean 运算符非常重要,它使得程序语言得以正常运行. Boolean 运算符有三种:NOT.AND 和 OR. ToBoolean 操作 在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作. 抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值: 参数类型 结果 Undefined false Null false Boolean 结果等于输入的参数(不转换) Number 如果参数为 +0, -0 或 N

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com