前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中输出~6=-7的原因

java中输出~6=-7的原因

原创
作者头像
知识浅谈
修改2020-07-28 09:54:29
7020
修改2020-07-28 09:54:29
举报
文章被收录于专栏:分享学习分享学习

重要的事情说在前边

在计算机中,数值一直是使用补码进行存储的

取反(~)和反码是不一样的,取反是把数值转换成二进制之后每个位上取反,反码(正数和负数的反码规则不一样)

正/反/补码解释
  1. 正数的原码/反码/补码 相同
  2. 正数取反(因为在计算机中数值的存储是按照数值的补码进行存储的,所以取反的时候先计算出数值的补码,然后取反)
  3. 负数的原码:是该数值的正值的符号位变成1
  4. 负数的反码:是其原码(除符号位)按位取反
  5. 负数的补码转换为原码:和原码变补码一样,除符号位外取反+1
  6. 负数补码:负数的反码+1正/负数取反方法
  7. 正数取反方法: 取补码:和正数的原码相同 按位取反:之后肯定是个负数 把对应的补码转换成原码就是输出的数(此过程和原码取反码一样)
  8. 负数的取反方法 取补码:先把负数取反,然后+1就得到补码 按位取反:因为去反后为整数 * 把对应的补码转换成原码:因为正数的原码=补码,所以不变~6在计算机中的计算首先,6的原码、反码、补码相同,即都为0000 0110
  9. 计算机拿到6的补码,即0000 0110
  10. 对6的补码进行“~”计算(按位取反),得到1111 1001
  11. 结果已经得到了,只不过是一个补码形式,所以接下来要把补码转换成原码(因为这个结果很明显是个负数,所以按照负数的补码转换成原码的公式来),由上述公式得到原码为:1000 0111
  12. 已经得到结果的二进制,将二进制转换成十进制,得到-7
~(-6)在计算机中的计算

首先,-6的原码:1000 0110; 反码: 1111 1001; 补码:1111 1010

  1. 计算机拿到-6的补码,即1111 1010
  2. 对补码进行按位取反,得到0000 0101
  3. 将上述补码形式转换为原码,依旧是0000 0101
  4. 转换成十进制,得到最终结果5

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正/反/补码解释
  • ~(-6)在计算机中的计算
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档