java 的原码、补码、反码小总结

先看一个代码吧:

int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

这个应该很熟悉吧,是 java 里 HashMap 的计算 hash 值的方法.这里有一个运算符 "^",他其实就是使用补码来运算的.好了,那么我们下面来说说这些吧:

 >原码。就是当前数字的二进制表现形式,如-1的原码是1000 0001>反码正数的反码就是本身。负数的反码是二进制保留符号位。剩余位取反,比如-1的反码是1111 1110>补码正数的反码、补码、原码都是一样的,负数的补码是在其反码的基础上+1,比如-1的补码是1111 1111。正数的原码、反码、补码都相同。负数的反码是除符合位为1外,其他位全取反,简单地说,负数求补码,“反码加1“。
这句话是不负责任的,因为原码、反码和补码概念中,存在符号位,总结一下,”取反加1“时符号位怎么办:1)取反时,符号位不参与取反。2)加1时,符号位参与加1。3)特殊补码,即首位为1,其它位全是0。对于这种形式的补码,不要去求它的原码了,求出来也不对,它就表示该类型中的最小负数,比如10000000表示byte类型中的最小负数-128。已知一个数的补码,求原码的操作分两种情况:1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码.2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取 反,然后再整个数加1.例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111.java有7种位运算符:与(&),或(|),异或(^),取反(~),左移(<<),有符号右移(>>),无符号右移(>>>)。
这7种位运算符,运算时,符号位都要参与运算。具体的规则如下:&    如果相对应位都是1,则结果为1,否则为0    (A&B),得到12,即0000 1100|    如果相对应位都是0,则结果为0,否则为1    (A | B)得到61,即 0011 1101^    如果相对应位值相同,则结果为0,否则为1    (A ^ B)得到49,即 0011 0001〜 按位补运算符翻转操作数的每一位,即0变成1,1变成0。    (〜A)得到-61,即1100 0011<< 按位左移运算符。左操作数按位左移右操作数指定的位数。    A << 2得到240,即 1111 0000>> 按位右移运算符。左操作数按位右移右操作数指定的位数。    A >> 2得到15即 1111>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。    A>>>2得到15即0000 1111//1.&
int a = 10,b = 6;
/*** a = 10 > 00000000 00000000 00000000 00001010* b = 6  > 00000000 00000000 00000000 00000110* &* 2 >      00000000 00000000 00000000 00000010*/
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(a & b);a = -10;
b = -6;/*** a = -10 > 11111111 11111111 11111111 11110110* b = -6  > 11111111 11111111 11111111 11111010* &* r = -14 > 11111111 11111111 11111111 11110010*///-10
// 原码 10000000 00000000 00000000 00001010
// 反码 11111111 11111111 11111111 11110101
// 补码 11111111 11111111 11111111 11110110//-6
// 原码 10000000 00000000 00000000 00000110
// 反码 11111111 11111111 11111111 11111001
// 补码 11111111 11111111 11111111 11111010// -14
// 原码 10000000 0000000 00000000 00001110
// 反码 11111111 1111111 11111111 11110001
// 补码 11111111 1111111 11111111 11110010

System.out.println("a = " + a + ",补码是:" + Integer.toBinaryString(a));
System.out.println("b = " + b + " ,补码是:" + Integer.toBinaryString(b));
System.out.println("a ^ b is:" + (a & b));
System.out.println("结果的补码是:" + Integer.toBinaryString(-14));

 

转载于:https://www.cnblogs.com/zhuzi91/p/8818950.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django08:模型层(ORM)--测试脚本/必知的13条/神器的双下划线查询/多表操作

单表操作 django 自带的sqlite3数据库对日期格式不是很敏感&#xff0c;处理的时候容易出错。 测试脚本 测试环境准备&#xff1a;去manage.py 中拷贝钱四行代码&#xff0c;然后自己手写两行。 脚本无论在引用下面&#xff0c;还是单独开设PY文件都可以。 import os impor…

“互联网+”促传统企业三大转型

2015年是传统行业互联网化的元年。国家提出要制定“互联网”行动计划后&#xff0c;互联网旅游、互联网汽车、互联网三农、互联网物流、互联网医疗等开始起步。同时&#xff0c;面对不确定的移动互联网时代&#xff0c;互联网某些技术和模式还在进化、演变之中&#xff0c;每一…

开发高性能ASP.NET应用

本文是“.NET Conf China 2022”上我的一个分享&#xff0c;这里更细化的分享出来。分享分为四个部分&#xff1a;制定指示设计应用正确测试性能优化高性能&#xff1a;不一定是架构出来的&#xff0c;但一定是优化出来的。制定指标-收集首先把项目中的热路径API和核心API找出来…

Ethereum-EIPs

What is an EIP? Ethereum Improvement Proposal 以太坊改进建议的文档 这个文档向Ethereum社区提供信息&#xff0c;为Ethereum、Ethereum的进程、环境描述一个新特征&#xff0c;该EIP应当为该特征提供一个基本的技术描述和原理原理。该EIP作者有责任在社区和不同意见的文档…

Django08-1:模型层(ORM)--聚合查询/分组查询/F与Q查询/开启事务/常用字段及参数/自定义字段/数据库查询优化

聚合查询 单独使用时&#xff0c;用aggregate 1.只要是跟数据库相关的模块 基本都在django.db.models里面 如果没有应该在django.db里面 2. 聚合查询通常配合分组使用 from django.db.models import Avg, Sum, Max, Min, Count# 1.所有书的平均价格 resmodels.Book.objects.…

记事本状态栏不会自动_如何在记事本中同时启用状态栏和自动换行

记事本状态栏不会自动The status bar in Windows’ Notepad displays the current line number and column number of the cursor location. However, if you find that the Status Bar option on the View menu is grayed out, it may be because you have Word Wrap enabled…

洛谷P2587 [ZJOI2008] 泡泡堂

题目传送门 分析&#xff1a;一道策略游戏题&#xff0c;要求最大期望得分和最小期望得分。首先分析最大&#xff0c;很显然是可以用一种类似于田忌赛马的思维来做&#xff0c;将两队的实力按照从大到小&#xff08;其实从小到大也可以&#xff09;排序&#xff0c;然后就按照顺…

极端高温导致澳大利亚断网

&#xfeff;西澳大利亚首府珀斯因恶劣天气出现了网络连接问题&#xff0c; 网络故障不是由于暴风雨或闪电引起的&#xff0c;而是极端高温。本周一是珀斯有记录以来第六热的天&#xff0c;当天最高温度达到了44.4℃。因为创纪录的高温&#xff0c;澳大利亚宽带 服务商iiNet在当…

推荐一款采用 .NET 编写的 反编译到源码工具 Reko

今天给大家介绍的是一款名叫Reko的开源反编译工具&#xff0c;该工具采用C#开发&#xff0c;广大研究人员可利用Reko来对机器码进行反编译处理。我们知道.NET 7 有了NativeAOT 的支持&#xff0c;采用NativeAOT 编译的.NET程序 无法通过ILSpy 之类的传统工具得到源码&#xff0…

并行传输数据和串行传输数据_为什么串行数据传输比并行数据传输快?

并行传输数据和串行传输数据SATA hard drive connections are faster than older PATA hard drive connections and the same can be said for external cabling standards, but this is counter-intuitive: why wouldn’t the parallel transmission be faster? SATA硬盘驱动…

得到某月的天数

Calendar timeCalendar.getInstance(); time.clear(); time.set(Calendar.YEAR,2018);//year年 time.set(Calendar.MONTH,1);//Calendar对象默认一月为0,month月 int daytime.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 System.out.pri…

Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式

图书管理系统笔记 redirect括号内可以直接写url 也可以直接写别名 但如果别名需要参数&#xff0c;必须使用reverse解析。 choices用法 使用场景&#xff1a;能列举完全的数据 #使用方法&#xff1a;xxx_choice #1. get.xxx_display #2. 如果超出范围&#xff0c;则显示原…

业务处理速度变慢?且看IT如何成为救世主

在日常生活的方方面面&#xff0c;我们似乎都在期待着一种即时的便利。比如&#xff0c;用手机购物、订餐、缴费、预约挂号等等。而在企业中&#xff0c;时间与效率可不是一种休闲福利&#xff0c;而是一项重要的商业功能。我们有理由期待&#xff0c;当今史无前例的数字革命正…

微软让卡塔尔世界杯踏入元宇宙

遵守前一篇公众号文章里的承诺&#xff0c;昨天盆盆在视频号里录制了一段5分钟左右的短视频&#xff0c;讲了江森自控和微软Azure&#xff0c;如何帮助卡塔尔世界杯打造基于元宇宙的数字体育馆。Part.1欢迎扫码关注我的视频号(每天更新元宇宙、云计算和数字化的短视频)。Part.2…

洛谷——P1305 新二叉树(新建二叉树以及遍历)

题目描述输入一串二叉树&#xff0c;用遍历前序打出。 输入输出格式输入格式&#xff1a; 第一行为二叉树的节点数n。(n \leq 26n≤26) 后面n行&#xff0c;每一个字母为节点&#xff0c;后两个字母分别为其左右儿子。 空节点用*表示 输出格式&#xff1a; 前序排列的二叉树 输…

插槽1单通道插槽2双通道_相机双存储卡插槽有什么大不了的?

插槽1单通道插槽2双通道If you paid any attention to the launch of Canon and Nikon’s first full frame mirrorless cameras—the EOS R, Z6, and Z7— you’d have noticed that some people were pretty unhappy that they only came with a single card slot—an SD slo…

python 垃圾回收详解

原文&#xff1a;https://zhuanlan.zhihu.com/p/31150408 总纲策略和垃圾回收系统工作内容引用计数详解标记-清除分代收集循环引用编程应用-常见方法ex 过程详解使用建议触发机制参考文献Python垃圾回收机制--完美讲解&#xff08;Python vs Ruby&#xff09;Python垃圾回收机制…

Django10:Ajax介绍/发送数据/SweetAlert

Ajax 异步提交 局部刷新 发送方式 1. 浏览器输入url&#xff0c;按enter get 2.a标签href属性 get 3.form表单 get/post 4. ajax get/post ajax 不是编程语言&#xf…

物联网数据终端演进之道

智能手机的普及在最近几年掀起了一股取代企业数据终端的风潮&#xff0c;但正如笔者在一年前便提到过 的&#xff0c;“智能手机难以在企业级应用中得以普及”&#xff0c;这种观点最好的佐证便是时至今日&#xff0c;由于安全性与管理合规的需要&#xff0c;个人计算机用于企业…

mac 不能连接wi-fi_如何阻止Mac自动连接到Wi-Fi网络

mac 不能连接wi-fiYour Mac automatically reconnects to Wi-Fi networks you’ve previously connected to. Starting with macOS High Sierra, you can now tell your Mac not to automatically connect to certain Wi-FI networks. Your Mac will remember the Wi-Fi networ…