以-3为例,其对应的原码、反码、补码分别为10000000000000000000000000000011、11111111111111111111111111111100、11111111111111111111111111111101。通过补码形式进行计算,解决了-0和+0的问题。在Java中,进行字节数组转换为int类型的操作时,需要根据字节值的大小进行区别处理。例如,对于大于127的字节值,直接强转后高位...
整数默认用int类型(32位)以补码的形式存储,2的二进制表示是000...00010(10前面有30个0),因此~2就是111...11101(01前面有30个1)。而-3的原码是100...00011(11前面有29个0),反码是1111...11100(00前面有30个1),补码是111...11101(01前面有30个1)不就是~2吗?因此~2是-3...
~是求反运算,与取补码的运算无关,就是严格地按照二进制数逐位进行取反运算。另外你的图片无法浏览,分辨不清
回到题目上来,-3的二进制码是3-1的反码,也就如图一所示,当数据类型为int时为:11111111111111111111111111111101 -3 >>1 就是:11111111111111111111111111111110 也就是-2 -3 >>>1 会无视符号(等于是转正数了)为:0 111 1111 1111 1111 1111 1111 1111 1110 仅比最大的int...
过程为 11111101 取反 00000010 加1 00000011 最后把00000011转为十进制3,但不要丢了符号,因此2的补码为-3.不知楼主看懂了么。ps:楼主应该知道十进制、二进制、八进制、十六进制的相互转换吧,不知道的话,可要好好补补啊!