java中按位取反 ~5=

您所在的位置:网站首页 取5整数是什么意思 java中按位取反 ~5=

java中按位取反 ~5=

2024-06-17 01:27| 来源: 网络整理| 查看: 265

java中按位取反 ~5=-6。

原因:

这是因为整数在计算机中是二进制存储的。

java中 ~5=-6 ,而这个-6是输出到屏幕上,我们看到的是-6。

首先看对5求反,

5的二进制原码是:0000 0101,

取反之后是:1111 1010 ,得到的这个值在计算机中的存储原型也是 1111 1010,而要把这个结果显示出来,到计算机屏幕上就要转换成十进制,也就是说 1111 1010 是补码形式,

补码 = 原码取反 + 1。

补码要换算成对应的十进制就是

原码取反 = 补码 -1

所以 1111 1010  - 1 = 1111 1001, 然后再对 1111 1001 取反,得到 1000 0110,

所以 原码就是 1000 0110,对应的十进制就是 -6。

同样的,这样看也行:

-6在计算机中的存储为二进制补码形式,也就是说-6的补码是 1000 1010 (-6的二进制原码是:1000 0110,源码取反之后是 1111 1001,再加上1就是 1111 1010,这就是补码了)。

=========================================================

百度中同样的问题:

c语言中十进制5按位取反是多少

这个回答也是一个意思:

5的二进制是00000101,取反后是11111010,因为%d是按照有符号十进制数字输出,所以会把11111010按照有符号十进制数字处理,根据进制转换的规则对11111010先减一,再取反,得到00000110,即6,但是有符号数中的符号位是1,所以会输出-6。

参照:https://zhidao.baidu.com/question/877699155323215652.html

==============================================================

还有在java中:

System.out.println((byte)128)) = -128;

System.out.println((byte) 131) = -125;

这是因为:

byte只有8位 10000000根本就不是通过源码计算出来的 谈何取反(byte)128 输出为-128  在System.out.println((byte)128));中128会被认为是int类型  它的补码是 00000000000000000000000010000000 不是10000000 (byte)128的存储为  10000000 而不是  00000000000000000000000010000000在byte中 10000000(注意这是补码)比较特殊 没有任何源码在转补码时能转换为 10000000(在byte类型中)人为规定 10000000 就是-128换个一般的例子 存在对应源码的 比如说 System.out.println((byte) 131);输出为多少 这样计算131 的补码是 00000000000000000000000010000011  从int到byte 去掉前面24个0 得到(byte) 131的补码是 10000011(byte) 131的反码是 10000010(byte) 131的源码是 11111101在byte中  源码是 11111101 的二进制整数是 -125  

所以System.out.println((byte) 131); 输出 -125

参照:https://bbs.csdn.net/topics/380129758

====================================================

更多的细节可看:

计算一个有符号的补码方式

http://blog.csdn.net/u010141129/article/details/23824469



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3