源码就是符号位 + 二级制数值。符号位是第一位,0 表示正数,1 表示负数。

Java 中 byte 类型一字节八位,可以表示 [1111 1111 , 0111 1111],取值 [-127,127].

反码

正数的反码是其本身;负数的反码是在原码的基础上,符号位不变,其他位相反。

如 0000 0001 的反码是 0000 0001;1000 0001 的反码是 1111 1110。

补码

正数的补码是其本身;负数的补码是反码 + 1。

如 0000 0001 的补码是 0000 0001;1000 0001 的补码是 1111 1111。 -128 补码是 1000 0000。

意义

知其然也要知其所以然。为毛计算机要衍生出原码、反码、补码?

一句话为了方便计算机做减法。

计算机中只有加法器没有减法器,如果要做减法相当于加一个负数。比如 5 - 3 当成 5 + (-3),那么 (-3) 怎么表示呢?

在源码中,正数相加是没问题的。比如 0000 0001 + 0000 0001 = 0000 0010,也是十进制的 1 + 1 = 2,但如果是 1 + (-1) 就会变成 0000 0001 + 1000 0001 = 1000 0010,结果是 -2 。

为了解决这个问题,反码出现了。

如果用反码计算,1 + (-1) 是 0000 0001 + 1111 1110 = 1111 1111 ,在反码中 1111 1111 表示 0,这样就做到了 1 + (-1) = 0。

但是还有个问题,反码中 1111 1111 和 0000 0000 都表示 0 ,准确地讲,一个是 -0,一个是 0。为了拯救强迫症患者,补码出现了。

补码怎么解决这个问题呢?

补码将 -0 + 1,即 1111 1111 + 1 = 1 1000 0000,结果超出范围了(第一个 1 表示符号,1000 0000 表示数值),要去除高位,也就是结果为 1000 0000。

生活中有这样的例子,向北绕地球 3/4 圈和向南绕地球 1/4 所在的经纬度一样的;正向旋转 90° 和逆向旋转 270° 位置也是一样的,只看个位的话,5 - 2 和 5 + 8 结果一样的。补码的 -0 + 1 是类似的,超出的高位没有意义去除就好了,同时最后的结果也是正确的。

在刚刚的例子中,地球一圈、360°、10 这些称为摸,3/4 与 1/4、90° 与 270°、2 与 8 和为模的两个数为补数。

补码将 1000 0000 和 0000 0000 区分开,1000 0000 表示十进制的 -128,0000 0000 表示 0。

再扩展一下,加法器是什么?人脑可以迅速计算出 1 + 2 = 3,但计算机怎么计算呢?

计算机芯片有通电与不通电两个档位,通电为高压(一般 5V,表示二进制 1),不通电低压(一般 0V 表示二进制 0),组装成复杂的电路基本三门——与或非门。

与门:A 和 B 都为 1 结果为 1,否则为 0。

或门:只要 A 和 B 中有一个为 1 结果即为 1。

非门:A 为 1 结果为 0,A 为 0 结果为 1。

以上三门可以组装成异或门。

异或门:A 和 B 结果不一样时结果为 1。

加法的本质是给两个本位,计算出新的本位和进位。比如原本位 1 + 1 得到新本位 0 和进位 1 。

把异或门和与门并联就是半加法器,加法器是 N 个半加法器的复杂组装。

好了,我写蒙了,估计你也看蒙了,不是你的问题,我表达不太好,有疑问可以评论,我们互相讨论。

到这里算是对原码、反码、补码稍微深刻点的认识吧。

移位运算符

左移运算符 <<

将二进制数整体向左移动指定位数,右边空位补 0,比如 a << 1 等价于乘以 2 ,但要注意符号位和取值范围。

右移运算符 >>

将二进制数整体向右移动指定位数,左边空位补符号位,比如 a >> 1 等价于乘以 2 ,同样要注意符号位和取值范围。

无符号右移运算符 >>>

将二进制数整体向右移动指定位数,左边空位补 0,正数等同于 >> ,负数会因补 0 变为正数。

待续。。。

其实移位运算符这的疑问也挺多的,比如补 0 和补符号位怎么储存的?原码中只有第一位表示符号,如果要补 2 个符号位分么办?为什么移位相当于乘除 2^n?,如果 5 右移一位怎么搞?等等

实在特么写的有点惨(手动捂脸),先把半成品发出来看能不能混几个赞激励下自己哈哈哈哈,溜了溜了,明天把这些问题搞清楚了再补充。

每一次成长,都想与你分享。(小声BB,抽奖在公众号里面。)

java装逼的话_Java 源码装逼技能之让人懵逼的符号相关推荐

  1. java string 异或_Java源码——String

    最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写 一遍,下面是楼主整理出来的一小部分.我把整体的项目托管到GitHub上了,欢迎大家前去交流学习. ...

  2. java代码管理工具_java源码管理与版本控制工具,图文详解

    近些年社会科学技术水平的发展越来越快速了,这也促进了人们对于新技术新知识的学习.尤其是java的应用也越来越广泛.今天就来为大家介绍一下,java源码管理与版本控制工具,一起来了解一下吧. java项 ...

  3. java的resize函数_Java源码解析HashMap的resize函数

    hashmap的resize函数,用于对hashmap初始化或者扩容. 首先看一下该函数的注释,如下图.从注释中可以看到,该函数的作用是初始化或者使table的size翻倍.如果table是null, ...

  4. java计算本金利息_Java源码——复利的计算(compound interest)

    代码功能: 给出本金,计算在不同的年复合利率下不同经过年数(期数)对应的本息和. 代码: package v1ch03.CompoundInterest; /** * This program sho ...

  5. Java 并发编程 -- 线程池源码实战

    一.概述 小编在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写的太简单,只写了一点皮毛,要么就是是晦涩难懂,看完之后几乎都 ...

  6. Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  7. 基于JAVA鞋店销售管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA鞋店销售管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA鞋店销售管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  8. 计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...

  9. java毕业设计校园二手商品交易系统源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计校园二手商品交易系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计校园二手商品交易系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...

最新文章

  1. EM不同气候条件下土壤稀有与丰富微生物类群的分化策略
  2. 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
  3. 系统监理师备考经验分享
  4. 【HTTP】之HTTP 错误 401.3 - 访问被资源 ACL 拒绝
  5. boost::gregorian模块实现日期相关的测试程序
  6. OpenStack自动发现计算节点
  7. LeetCode 1215. 步进数(BFS/DFS)
  8. 怎么删除已经安装的mysql_怎么样删除已经安装的mysql | wdlinux致力于Linux服务器架构,性能优化.免费CDN加速系统,免费智能DNS解析,负载均衡,集群分流...
  9. matlab修改图片位深度_如何利用matlab统一处理照片亮度对比度
  10. Master公式求递归复杂度
  11. 训练集,验证集,测试集
  12. 中标麒麟系统u盘安装_怎么从u盘启动安装中标麒麟操作系统
  13. java计算器项目 wbs分解_WBS功能分解
  14. javascript实现常用的设计模式
  15. JavaScript,实现这样的情景:阅读协议,阅读完毕后就可以点击同意复选框。
  16. HDU 5855 Less Time, More profit(最大权闭合图)
  17. RadioGroup+Fragment+PulltorefreshScrollView+GridView+侧拉菜单+TabLayout+ViewPager
  18. 程序员专属小情话,哎呦,不错哦!!!
  19. 行人重识别常用数据集
  20. 二建机电实务视频教程

热门文章

  1. 百度编辑器ueditor添加视频方法
  2. 人脸验证:DeepID(转)
  3. 计算机技能大赛简讯内,科技节现场类比赛简讯
  4. string的查找字符串操作
  5. Word文档转换Markdown文档
  6. GIS应用技巧之矢量图斑融合
  7. 你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!...
  8. 讨论OOV(新词,也叫未登录词,词典之外的词语)问题的解决方案
  9. 信号反射原理及其典型应用
  10. 可以完美在 wps中使用zotero的方法