Java中正负数的存储方式-正码 反码和补码
Java中正负数的存储方式-正码 反码和补码
正码
我们以int 为例,一个int占用4个byte,32bits
0 存在内存上为
00000000 00000000 00000000 00000000
11 存在内存上为
00000000 00000000 00000000 00001011
反码
逐位取反,就得到一个对应的反码
以11为例
正码: 00000000 00000000 00000000 00001011
反码: 11111111 11111111 11111111 11110100
补码
在补码的基础上再加1,就可以得到补码。
同样以11为例
正码: 00000000 00000000 00000000 00001011
反码: 11111111 11111111 11111111 11110100
补码: 11111111 11111111 11111111 11110101
此时候就可得到-11在内存上的表示方式(11111111 11111111 11111111 11110101)
如果要知道某个二进制的负数实际上是多少(最高位为1)
以0xFFFFFFFF为例子
补码: 11111111 11111111 11111111 11111111
反码: 11111111 11111111 11111111 11111110
正码: 00000000 00000000 00000000 00000001
正码为1,所以0xFFFFFFFF (11111111 11111111 11111111 11111111)表示-1.
这么做的原因
这是因为底层硬件对数据做运算的时候,只有加数器可用,也就是只能直接把数据拿来相加,通过将负数用这种方式来表达,就可以直接通过对二进制码相加实现对数据的加减运算。
以 -11+5 为例子
-11: 11111111 11111111 11111111 11110101
+5 : 00000000 00000000 00000000 00000101
-6 : 11111111 11111111 11111111 11111010
反码: 11111111 11111111 11111111 11111001
正码: 00000000 00000000 00000000 00000110
Java中正负数的存储方式-正码 反码和补码的更多相关文章
- Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- (转) Java中的负数及基本类型的转型详解
(转) https://my.oschina.net/joymufeng/blog/139952 面这行代码的输出是什么? 下面两行代码的输出相同吗? 请尝试在Eclipse中运行上面的两个代码片段, ...
- Java中创建对象的几种方式
Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...
- Java中反射的三种常用方式
Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- Java中创建对象的五种方式
我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...
- Java中的静态代理实现方式
1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...
- 【转】Java中创建对象的5种方式
Java中创建对象的5种方式 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...
- JAVA中循环遍历list有三种方式
转自:https://blog.csdn.net/changjizhi1212/article/details/81036509JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常 ...
随机推荐
- url 加参数
url = 访问地址 + ? key1=value1 & key2 = value2 304(未修改)自从上次请求后,请求的网页未修改过.服务器返回此响应时,不会返回网页内容. 加参数,骗过服 ...
- [LOJ113] 最大异或和 - 线性基
虽然是SB模板但还真是第一次手工(然而居然又被运算符优先级调戏了) #include <bits/stdc++.h> using namespace std; #define int lo ...
- SP1716 GSS3 - Can you answer these queries III - 动态dp,线段树
GSS3 Description 动态维护最大子段和,支持单点修改. Solution 设 \(f[i]\) 表示以 \(i\) 为结尾的最大子段和, \(g[i]\) 表示 \(1 \sim i\) ...
- 时间日期转换工具类,获取当前时间YYYYMMDD24HHMISS、YYYYMMDDHHMISS
YYYYMMDD24HHMISS:24小时制时间(显示上只是比YYYYMMDDHHMISS中间多了一个24),例:2018102224112440 YYYYMMDDHHMISS:12小时制时间,例20 ...
- C++ vector的用法(转)
原文链接:https://blog.csdn.net/qinyuehong/article/details/92837359
- JS高级---总结apply和call方法的使用
apply和call的使用方法 apply的使用语法 函数名字.apply(对象,[参数1,参数2,...]); 方法名字.apply(对象,[参数1,参数2,...]); call的使用语法 ...
- layui表单之单选框提交
<div class="layui-form-item"> <label class="layui-form-label">状态< ...
- openresty + lua
lua语法总结: 1. 导入模块(用require来加载,模块是一个类型为table的全局变量) 导入写好的包,举例如下: 2. lua 数据类型(有8种:nil.boolean.number.str ...
- 短网址url接口api,url短链接(t.cn、url.cn)生成
简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...
- MySQL数据库 | 数据库和数据表的基本操作
第一篇博文,一个小小的纪念仪式^-^ 以下正文 一.数据库的基本操作 --数据库的操作 --连接数据库 mysql -uroot -p密码 mysql -uroot -pmysql --退出数据库 e ...