右移时应该注意的问题
2010-10-17 09:03
120 查看
package com.kkoolerter.jdk;
public class RightByteShift {
public static void main(String[] args) {
/*
* 注意下面的结果,无论-1右移多少位,它的结果始终是-1。 因为符号扩展在高阶位中引进了更多的1。
* 什么是符号扩展?答案是:右移时,空出的最高位(最左边) 由原来的最高位内容填充。这被称作“符号扩展”,在进行 右移时用来保持负数的符号。
*/
System.out.println("-1>>1 = " + (-1 >> 1));
System.out.println(HexByte.toHexString((byte) 2));
}
}
/**
* 把一个byte转换成十六进制表示 <br>
* 注意,右移后的值与0x0f进行按位与操作,目的是将扩展位符号丢弃
*
* @author Jenson
*
*/
class HexByte {
private static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static String toHexString(byte b) {
return new StringBuilder("0x").append(hex[(b >> 4) & 0x0f])
.append(hex[b & 0x0f]).toString();
}
}
本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/406805
public class RightByteShift {
public static void main(String[] args) {
/*
* 注意下面的结果,无论-1右移多少位,它的结果始终是-1。 因为符号扩展在高阶位中引进了更多的1。
* 什么是符号扩展?答案是:右移时,空出的最高位(最左边) 由原来的最高位内容填充。这被称作“符号扩展”,在进行 右移时用来保持负数的符号。
*/
System.out.println("-1>>1 = " + (-1 >> 1));
System.out.println(HexByte.toHexString((byte) 2));
}
}
/**
* 把一个byte转换成十六进制表示 <br>
* 注意,右移后的值与0x0f进行按位与操作,目的是将扩展位符号丢弃
*
* @author Jenson
*
*/
class HexByte {
private static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static String toHexString(byte b) {
return new StringBuilder("0x").append(hex[(b >> 4) & 0x0f])
.append(hex[b & 0x0f]).toString();
}
}
本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/406805
相关文章推荐
- FPGA综合过程中应该注意的几个代码风格的问题
- Android开发中使用static变量应该注意的问题
- Regex.Match 方法 中应该注意的几个问题
- java在使用实现了List接口时候应该注意的问题
- IT职业应该注意的几个问题
- matlab使用reshape应该注意的问题
- 关于写接口返回值应该注意的问题。
- 打包发布应该注意的问题
- 关于MySQL表设计应该注意的问题
- 云计算中国化的过程中应该注意的问题
- linux下网络服务器模型以及使用时应该注意的问题
- 美工跟程序员合作应该注意哪些问题?
- JAVA程序员面试时应该注意的问题
- 在编写SQL语句时应该注意的一些小问题;
- coreData 存储数据模型应该注意的问题
- 一些应该注意的问题
- ssh 使用时应该注意的问题
- 个人总结:嵌入式编程应该注意的问题
- JDBC操作timestamp和datetime时候应该注意的问题
- Ubuntu 14.04安装搜狗拼音linux版应该注意的问题