Java中正数与负数操作>>、>>>的区别
2015-10-26 10:57
176 查看
以下为个人理解,有不对的地方请提出
Java中,>>、>>>都是在数字的二进制的补码中进行的
正数的补码为本身 如
33的二进制表示为 00000000 00000000 00000000 00100001 补码为 00000000 00000000 00000000 00100001
负数的补码为符号位即最高位1不变(负数符号位为1,正数为0),其余各位取反,再加1 如
-33的二进制表示为 10000000 00000000 00000000 00100001 补码为 11111111 11111111 1111111 11011111
进行右移>>操作
33>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
因为33为正数,再取补码为 00000000 00000000 00000000 00000001 转为十进制为1 即33>>5=1
-33>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为-33为负数,再取补码为 00000100 0000000 0000000 00000010 最前一位1为符号位 转为十进制为-2 即-33>>5=-2
进行无符号右移>>>操作
33>>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000000 00000000 00000000 00000001 转为十进制为1 即33>>>5=1
-33>>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000111 11111111 11111111 11111110 转为十进制为134217726 即-33>>>5=134217726
[java] view plaincopy
public class Operator
{
public static void main(String[] args)
{
System.out.println(33>>5);
System.out.println(-33>>5);
System.out.println(33>>>5);
System.out.println(-33>>>5);
}
}
以上为个人理解,如有不对的地方,请各位指正。
Java中,>>、>>>都是在数字的二进制的补码中进行的
正数的补码为本身 如
33的二进制表示为 00000000 00000000 00000000 00100001 补码为 00000000 00000000 00000000 00100001
负数的补码为符号位即最高位1不变(负数符号位为1,正数为0),其余各位取反,再加1 如
-33的二进制表示为 10000000 00000000 00000000 00100001 补码为 11111111 11111111 1111111 11011111
进行右移>>操作
33>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
因为33为正数,再取补码为 00000000 00000000 00000000 00000001 转为十进制为1 即33>>5=1
-33>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为-33为负数,再取补码为 00000100 0000000 0000000 00000010 最前一位1为符号位 转为十进制为-2 即-33>>5=-2
进行无符号右移>>>操作
33>>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000000 00000000 00000000 00000001 转为十进制为1 即33>>>5=1
-33>>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000111 11111111 11111111 11111110 转为十进制为134217726 即-33>>>5=134217726
[java] view plaincopy
public class Operator
{
public static void main(String[] args)
{
System.out.println(33>>5);
System.out.println(-33>>5);
System.out.println(33>>>5);
System.out.println(-33>>>5);
}
}
以上为个人理解,如有不对的地方,请各位指正。
相关文章推荐
- 相对熵(KL距离)的java实现
- eclipse关联源码
- Java 读取属性文件Properties,方式2
- JAVA集合框架概述
- Java从0开始学——字符串
- Java-MySQL中文乱码编码问题总结
- java版记事本程序
- JavaWeb、J2-SE开发框架——Spring
- java 中inputstream 和outputstream的理解
- 利用eclipse开发动态web项目(适用入门)
- 杭电ACM 1012 u Calculate e java
- eclipse自动补全的设置
- eclipse快捷键失效
- Beetl实现java template的配置操作
- eclipse检测不到手机
- 36-Java怎样输入验证密码在6到8位?
- java二维数组的初始化及使用其长度
- java基础笔记(一)
- java反编译工具在线安装
- java编程之前需要了解的几个小常识