位运算符
概述
位运算符就是直接对二进制进行操作的运算符
主要有以下几种:
<<
左移
符号位参与移动,空位补0,被移除的最高位舍去。
一般正数每左移一位相当于原来的值*2
>>
右移
符号位不参与移动
当为正数,空位补0,;当为负数,空位补1
一般正数每右移一位相当于原来的值/2
>>>
无符号右移
符号位也参与移动,空位补0,被移除的舍去
二进制由0和1组成,一般的,0代表false,1代表true,于是按位运算相当于普通的逻辑运算了。
&
按位与
|
按位或
~
按位取反
^
按位异或
异或有一个特点,就是a^b = c; 则a^c能得到b;b^c = a;
首先操作的是二进制,是什么形式的二进制呢?
我们知道java里面数据是用二进制补码的形式存储的,也就是说操作的是数据的二进制补码。
例子:
public class TestOperator3 { /* 00000011 3<< 00001100 00000011 3>> 00000001 -3 10000000 00000000 00000000 00000011 11111111 11111111 11111111 11111100 11111111 11111111 11111111 11111101 11111111 11111111 11111111 11111101 011111111 11111111 11111111 1111110 11111110 11111101 10000010 1代表true,0false & | ^ ~(!) 00000110 6&3 00000011 00000010 2 00000110 6|3 00000011 00000111 7 00000110 6^3 00000011 00000101 5 注意:位运算符进行运算符号位也参与 00000110 ~6 11111001 11111000 10000111 -7 */ public static void main(String[] args) { /* i = 3<<2; System.out.println(i); i = 3>>1; System.out.println(i); i = 3>>>1; System.out.println(i); byte i = (byte)(-3>>>1); System.out.println(i); //2147483646 //2147483646 System.out.println(0b01111111111111111111111111111110); */ System.out.println(6&3); System.out.println(6|3); System.out.println(6^3); System.out.println(~6); } }
一般按位运算是速率最快的,因为计算机内是使用二进制进行运算的,而位运算直接操作的是二进制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决