Java中关于十进制数取反问题解决
2015-08-05 17:51
363 查看
首先再此申明:正数在计算机中是用二进制表示的,负数在计算机中是用补码表示的.
十进制数取反,举例说明:
比如: 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
十进制数取反,举例说明:
比如: 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
相关文章推荐
- 使用SpringMVC 配置<mvc:default-servlet-handler/> 报错
- Java反射机制应用
- spring集成quartz定时任务的配置
- java中==与equals的区别
- Java泛型总结
- Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统
- Spring的AOP2
- <JAVA>Hadoop安装配置(单机)
- Spring的AOP1
- Java开发记录
- JAVA 反射机制
- Spring.Net学习笔记四(IOC容器对象的作用域)
- Java 并发专题 :FutureTask 实现预加载数据
- java 24小时和12小时格式解析
- java 反射机制读取属性值
- struts2使用注解--ACTION中的应用
- java静态代理和动态代理(JDK&cglib)
- 编码方式获取Spring中PropertyPlaceholderConfigurer的属性
- Java回调机制解析
- <已解决> Eclipse启动失败