About unsign in Java
2012-05-31 09:59
190 查看
1.
java的数据类型都是有符号的,byte在java中的范围是-128~127,而在c#中byte范围是0~255,一直不明白,为何java的数据类型没有无符号的类型,难道在java中不需要用无符号的类型?很显然,C#中的byte型,在java中只能用short来取,这不明显浪费吗,还是java这样做是有其它的考虑?
2.
看到一段关于java无符号数据类型的说法,不太明白:Java的设计者感到无符号整数是不必要的。具体地说,他们感到无符号(unsigned)概念主要被用来指定高位(high-orderbit)状态,它定义了当int表示一个数字时的符号。你将在第4章中看到,Java对高位含义的管理是不同的,它通过增加一个专门的“无符号右移”运算符来管理高位。这样,就不需要无符号整数了。
3.
C++中的DWORD为32位无符号整数, 但在java中,就不能用int类型表示了,得用long,因为java中的int要包含负数,如果把C++中的DWORD直接转为java的int,超过Integer.MAX_VALUE的值就会变成负数从网上找来的代码,地址忘了,再贴上来吧
public static long getAs4Byte(final ByteBuffer buf, ByteOrder byteOrder) {
byte[] bytes = new byte[4];
buf.get(bytes);
StringBuilder builder = new StringBuilder();
String tmp = "";
if (ByteOrder.BIG_ENDIAN.equals(byteOrder)) {
for (int i = 0; i < bytes.length; i++) {
// java中byte的最大值是127,读取到的byte可能大于127,经过转换会变成负数.
tmp = Integer.toHexString(bytes[i] & 0xFF);// 所以在这里处理一下.
builder.append(tmp.length()==1?"0"+tmp:tmp);
}
} else {
for (int i = bytes.length - 1; i >= 0; i--) {
builder.append(Integer.toHexString(bytes[i] & 0xFF));
}
}
long value = new BigInteger(builder.toString(), 16).longValue();
return value;
}
相关文章推荐
- Something about set list and map in Java
- About stack and heap in JAVA(3)
- About stack and heap in JAVA(2)
- 10 points about instanceof operator in Java with example
- about “+=” operator in Java
- javadataAbout stack and heap in JAVA(2)
- About stack and heap in JAVA(1)
- about & in java
- Interview stuff about String class in java
- Interview with Dustin Kirkland, Ubuntu Core Developer about encryption in Ubuntu
- PDF library in Java
- There is no getter for property named 'id' in 'class java.lang.Integer'问题解决办法
- Exception in thread "main" java.lang.NullPointerException java报空指针异常
- 安装oralce后在cmd模式下运行java命令出错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/getopt/luke/Luke (Unsupported
- 部署程序问题, The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java
- Atitit. Exception in thread "main" java.lang.Error: Unresolved compilation problem:
- There is no getter for property named 'id' in 'class java.lang.Integer
- java.lang.UnsupportedClassVersionError: Bad version number in .class file
- [置顶] Android 修改multiDexEnabled true后友盟显示java.lang.IncompatibleClassChangeError的一种解决方案
- 每日英语:In Your Eyes: What They Reveal About Your Health