zoukankan      html  css  js  c++  java
  • About unsign in Java

    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;
    }

  • 相关阅读:
    Linux
    Linux下安装和使用FTp
    国内maven库镜像(阿里云)
    Java build path && Deployment assembly && 编译路径 && 发布路径
    关于Eclipse编译和执行文件时,后台默认执行动作的思考
    spring核心框架体系结构(各个jar包作用)
    OpenSessionInViewFilter的作用及原理
    Spring事务失效的原因
    解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题
    JTA 深度历险
  • 原文地址:https://www.cnblogs.com/qiengo/p/2527973.html
Copyright © 2011-2022 走看看