java中输出~6=-7的原因
【摘要】
重要的事情说在前边 在计算机中,数值一直是使用补码进行存储的 取反(~)和反码是不一样的,取反是把数值转换成二进制之后每个位上取反,反码(正数和负数的反码规则不一样)
正/反/补码解释
正数的原码/反...
重要的事情说在前边
在计算机中,数值一直是使用补码进行存储的
取反(~)和反码是不一样的,取反是把数值转换成二进制之后每个位上取反,反码(正数和负数的反码规则不一样)
正/反/补码解释
- 正数的原码/反码/补码 相同
- 正数取反(因为在计算机中数值的存储是按照数值的补码进行存储的,所以取反的时候先计算出数值的补码,然后取反)
- 负数的原码:是该数值的正值的符号位变成1
- 负数的反码:是其原码(除符号位)按位取反
- 负数的补码转换为原码:和原码变补码一样,除符号位外取反+1
- 负数补码:负数的反码+1
正/负数取反方法
- 正数取反方法:
- 取补码:和正数的原码相同
- 按位取反:之后肯定是个负数
- 把对应的补码转换成原码就是输出的数(此过程和原码取反码一样)
- 负数的取反方法
- 取补码:先把负数取反,然后+1就得到补码
- 按位取反:因为去反后为整数
- 把对应的补码转换成原码:因为正数的原码=补码,所以不变
~6在计算机中的计算
首先,6的原码、反码、补码相同,即都为0000 0110
- 计算机拿到6的补码,即0000 0110
- 对6的补码进行“~”计算(按位取反),得到1111 1001
- 结果已经得到了,只不过是一个补码形式,所以接下来要把补码转换成原码(因为这个结果很明显是个负数,所以按照负数的补码转换成原码的公式来),由上述公式得到原码为:1000 0111
- 已经得到结果的二进制,将二进制转换成十进制,得到-7
~(-6)在计算机中的计算
首先,-6的原码:1000 0110; 反码: 1111 1001; 补码:1111 1010
- 计算机拿到-6的补码,即1111 1010
- 对补码进行按位取反,得到0000 0101
- 将上述补码形式转换为原码,依旧是0000 0101
- 转换成十进制,得到最终结果5
文章来源: englishcode.blog.csdn.net,作者:知识浅谈,版权归原作者所有,如需转载,请联系作者。
原文链接:englishcode.blog.csdn.net/article/details/107624501
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)