Java特殊符号>>,<<,>>>
Java中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐
前面两个<<,>>容易理解一些,一般我们都可以直接得出结果,最后一个忽略符号位是什么意思呢?
最大的正整数
我们知道Java中Interger占用4个字节,其中最高位为符号位:
所以Integer能表示的最大正整数为:
2^31 - 1 = 0111 1111 1111 1111 1111 1111 1111 1111
2^31 = 2147483648 = 1000 0000 0000 0000 0000 0000 0000 0000
所以最大的正整数为:
2147483647
最小的负数
Java中的负数是用补码来表示的。
补码 = 负数的反码 + 1
负数: -1
1000 0000 0000 0000 0000 0000 0000 0001
反码:
1111 1111 1111 1111 1111 1111 1111 1110
补码:
1111 1111 1111 1111 1111 1111 1111 1111
负数:-0 (计算机中只有 +0 而不存在 -0的说法,因为-0是完全没有意义的存在)
1000 0000 0000 0000 0000 0000 0000 0000
反码:
1111 1111 1111 1111 1111 1111 1111 1111
补码:
1000 0000 0000 0000 0000 0000 0000 0000
其真实身份为:-2147483648
正0表示为:0000 0000 0000 0000 0000 0000 0000 0000
>>>的意思
知道了Interger在Java中的表示方法,我们就可以理解>>>的意思了。
- 因为正数的符号位为0,所以正数的 >>> 等同于 >>
- 负数的符号位为1,右移之后会有变化:
如:
-10:
Java中-10表示为: 11111111111111111111111111110110
-10 >> 2为,带符号右移: 11111111111111111111111111111101 = -3
-10 >>> 2为,无符号右移: 00111111111111111111111111111101 = 1073741821
额外:
-10 << 2, 11111111111111111111111111011000 = -40
最后
有些新手在对<<,>>,>>>的意思,一只半解,这里讲解一下。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C++程序设计基础(6)内存分配
1.知识点 三步走:申请,释放,指针置空。 1.1malloc、free函数 在C语言中内存malloc函数申请动态空间,以下展示其基本用法: 1 int *p = NULL; 2 p = (int *)malloc(sizeof(int) * 10);//申请 3 free(p);//释放,否则会造成内存泄漏 4 p = NULL;//指针置空,否则成为野指针 (1)动态分配的空间来自队空间,而指针本身作为局部变量存储在栈空间中。 (2)malloc有时候也可能申请空间失败,这时返回NULL,故需要对其进行判断。 (3)通过malloc动态申请的空间必须通过free函数释放,这两个函数成对出现。否则可用空间会越来越少。 (4)在通过free函数释放之后,最好将指针置空。 (5)malloc/free函数申请释放的过程其实就是可用空间链表不断在更新。 1.2new、delete函数 (1)new和delete运算符既可以应用于基本类型,也可以用于自定义类型,new操作符不仅申请了空间,然后还根据提供的参数进行构造函数初始化,delete在释放内存空间之前还会调用对象的析构函数,这些事n...
- 下一篇
JVM内存管理机制&线上问题排查
本文主要基于“深入java虚拟机”这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路。文章最后面是我对线上故障思考的ppt总结。 Java内存区域 虚拟机运行时数据区如下图所示: 15291199000153.jpg 方法区:方法区又称为永生代(Permanent Generation)是线程共享的内存区域。它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。当方法区内存溢出时报OOM:PermGen space。编译器生成的各种字节码和符号引用存放在运行时常量池中。堆:Java堆是Java虚拟机所管理的内存中最大的一块,所有线程共享。此内存区域唯一的目的是存放对象实例。几乎所有的对象实例(非基础类型)都在这里分配内存。Java堆还可以细分为新生代和老年代,其中新生代又可以分为Eden空间、From Survior空间、To Survior空间,对应的默认比例是8:1:1。在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区“To”是空的。紧接着进行GC,Eden区中所有存活的对象都会被复制到“To...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块