Java中关于十进制数取反问题解决

来源:互联网 发布:程序员和工程师的区别 编辑:程序博客网 时间:2024/04/28 11:12

首先再此申明:正数在计算机中是用二进制表示的,负数在计算机中是用补码表示的.

十进制数取反,举例说明:

比如: 1取反(~1)为-2,-1(~-1)取反为0,首先这问题关系到原码,反码,补码的知识,这里就不做详细说明.

(1)以正整数说明:现在对1以一个字节(1字节为8位)为例:1=0000 0001,~1表示按位取反=1111 1110因为计算机中存储的是补码,解释一下:这个补码的值减1,变成反码 1111 1101,首位为符号位,不变,其余取反,转为原码:1000 0010 = -2;即1取反为-2.


(2)以负整数说明:因为计算机中存储的是补码(二进制),所以我们先求出原码,转化为反码,再加1 为补码(注意符号位不变),在对补码取反(符号位根据取反变化)转化为10进制即为我们所求结果!现在对-1以一个字节(1字节为8位)为例:-1=10000001,反码为:11111110,补码为:11111111,在对补码取反为:00000000,所以转化为10进制为0 ,即-1取反为0.

大家可以用eclipse或者其他开发工具验证:如:

int x = 1 ,y = -1, z = 3, k = -3;

System.out.println(~x);//-2
System.out.println(~y);//0
System.out.println(~z);//-4
System.out.println(~k);//2

0 0
原创粉丝点击