Java 位运算符和 int 类型的实现
其他运算符
# 算术运算符
+、-、*、/、++i、i++、--i、i--
# 关系运算符
==、!=、>、=、<=
# 逻辑运算符
&&、||、!
# 赋值运算符
=、运算符=
# 其他运算符
## 三元运算符
bool表达式 ? x : y
## instanceof 运算符
boolean result = var instanceof classname;
位运算符
& 且
| 或
^ 异或
~ 按位取反
<< 左移运算符,向左移动指定位数,一般情况下每移动一位都会乘以2
>> 右移运算符,向右移动指定位数,一般情况下每移动一位都是除以2
>>> 按位右移补零操作符
Java int 的实现
int 基本信息
Java 中 int 为32 位,是基本类型的一种,对应包装类为Integer
Java 不存在无符号类型,int 由0、1~2^31-1、-1~(-2)^31 三部分组成
负数如何表示?
负数部分使用补码表示
补码:原码按位取反得到反码,反码加一得到补码
正整数部分少一个数
因为 1····0 的补码为其本身,这是一个负数,一个二进制数总能表示偶数个数字,使用了0之后负数能比正数多表示一个,就是 1····0。
重点,Java 中int 位移的特殊情况
根据 int 实现的原理,int 移位会产生一些特殊情况,如:
2147483647<<1 的结果为 -2,为什么呢?因为 2147483647 为 2^31-1(2的31 次方减1),即:0111,1111,1111,1111,1111,1111,1111,1111,当它向右移位得到的结果是 1111,1111,1111,1111,1111,1111,1111,1110,此时对于 Java 来讲,这已经是一个负数了
要先减去1 得到 1111,1111,1111,1111,1111,1111,1111,1101,再取反得到 0000,0000,0000,0000,0000,0000,0000,0010 也就是 2,所以结果是-2
利用Java位运算符,完成Unsigned转换(无符号)
方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...
LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)
1.问题描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 算法应该具有线性时间复杂度并且不使用额外空间. 输入: [4,1,2,1,2] 输 ...
Java位运算符、位移运算符;原码、反码、补码
文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)
运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.
- ...Java byte类型转换成int类型时需要 &; 0XFF的原因
Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...
【java提高】(17)---Java 位运算符
Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...
Java位运算符浅析
在学习源码中,发现有大量使用位运算符,这样做的目的是为了节约内存开销和加快计算效率. 位运算符,这个”位”代表这什么? 位:二进制位简称“位”,是二进制记数系统中表示小于2的整数的符号,一般用1或 0 ...
java 位运算符 以及加法 交换两个变量值
先给出十转二的除法 2 60 30 0 15 0 7 1 3 1 1 1 0 1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...
(九)java位运算符
位运算符 &(与),|(或),^(异或),~(取反),<>(右移),>>>(无符号右移) 1:为true,0为false ...
随机推荐
利用yii2 gridview实现批量删除案例[转]
今天仍然继续探讨GridView的问题,昨天有个小伙伴留言说你用gridview给我去掉表头的链接?我想啊想,这用gridview确实不容易实现,至少我没想出来,会的下方可留言.但是呢,这根gridv ...
UIScrollView的使用
UIScrollView表示可滚动的视图,它最主要的使用场景是让用户可以通过拖拽显示布置一屏的数据. 常用的属性或者方法有: frame:NSRect显示范围,小于屏幕尺寸的矩形区域: content ...
JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
第20章 DLL高级技术(2)
20.3 延迟载入DLL 20.3.1延迟载入的目的 (1)如果应用程序使用了多个DLL,那么它的初始化可能比慢,因为加载程序要将所有必需的DLL映射到进程的地址空间.→利用延迟加载可将载入过程延伸到 ...
configure: error: Please reinstall the libcurl distribution
configure: error: Please reinstall the libcurl distribution - easy.h should be in /include/curl/ 基本上 ...
部署WEB应用程序
部署WEB应用程序: 1.在模板机上新建IIS站点 2.安装WebDeploy后在IIS控制台中导出站点为应用程序包 其站点在新虚机上必须存在,否则会报错,如下: 应用程序(C:\ProgramDat ...
C#的数据类型、数据类型的转化
一.c#有15个预定义类型,其中13个是值类型,两个是引用类型(string 和 object)这里主要说明整型.浮点型.布尔型以及引用型 1.整型数据 2.浮点型 浮点型从精度有低到高有float. ...
Spring Boot 简单小Demo 转载!!!
Spring Boot简介 接下来我们所有的Spring代码实例将会基于Spring Boot,因此我们先来了解一下Spring Boot这个大杀器. Spring早期使用XML配置的方式来配置Spr ...
这可能是目前最新的 Vue 相关开源项目库汇总(转)
访问地址:https://juejin.im/entry/58bf745fa22b9d0058895a58 原文链接:https://github.com/opendigg/awesome-githu ...
WinForm中执行JS代码(多种方法)
方法一 使用微软官方组件Interop.MSScriptControl 1.msscript.ocx下载的地址 http://www.microsoft.com/downloads/details ...