java byte
项目中有段代码,一直让我疑惑不解,但我是个很会偷懒的人,只要拷贝来改改能用的代码,万万不会自己动手写,虽然一直有疑惑,也懒得搭理是怎么个原理。
直到今天,又要解析协议,又要动这个地方的代码,还是来盘他吧。
看下面这个flag的值,我一直想不明白的就是这个,short是两个字节的,取值范围 “-32768 (-2的15此方) -- 32767 (2的15次方-1)”,这个byte明明只取了第15位上的一个数,比如 0xF4 ,怎么就变成了负数-12,明明可以放下的,明明是244。
直到今天细细看了下,才解了疑惑,这个 0xF4 是存储在 byte[] 数组里的,那么取出来的时候 0xF4 已经是 byte 类型的一个值了,byte是1个字节的,取值范围是 -128 ~ 127 ,明显244已经超过了127,最高位被当做符号位来处理了,自然就变成了负数,想要用无符号位来接收这个值,存储到更大的存储单元,比如short,就得取按位与 0xFF 以后的 short 值。
flag 其实就是 (byte) 0xF4 (short) (flag & 0xFF) -- 这个才是按照无符号位取出来的 short 值,也就是244
下面附上一些查阅的资料:
、byte与int转换
public static byte intToByte(int x) {
return (byte) x;
}
public static int byteToInt(byte b) {
//Java 总是把 byte 当做有符处理;我们可以通过将其和 0xFF 进行二进制与得到它的无符值
return b & 0xFF;
} 、byte[]与int转换
public static int byteArrayToInt(byte[] b) {
return b[] & 0xFF |
(b[] & 0xFF) << |
(b[] & 0xFF) << |
(b[] & 0xFF) << ;
}
public static byte[] intToByteArray(int a) {
return new byte[] {
(byte) ((a >> ) & 0xFF),
(byte) ((a >> ) & 0xFF),
(byte) ((a >> ) & 0xFF),
(byte) (a & 0xFF)
};
}
一、基本数据类型的特点,位数,最大值和最小值。
、
基本类型:short 二进制位数:
包装类:java.lang.Short
最小值:Short.MIN_VALUE=- (-2的15此方)
最大值:Short.MAX_VALUE= (2的15次方-)
、
基本类型:int 二进制位数:
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= - (-2的31次方)
最大值:Integer.MAX_VALUE= (2的31次方-)
、
基本类型:long 二进制位数:
包装类:java.lang.Long
最小值:Long.MIN_VALUE=- (-2的63次方)
最大值:Long.MAX_VALUE= (2的63次方-)
、
基本类型:float 二进制位数:
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-)
、
基本类型:double 二进制位数:
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-)
java byte的更多相关文章
- 【转】java byte转long、double、float、int、short,或者long、double、float、int、short转byte
原文网址:http://www.xuebuyuan.com/988752.html java byte与其他数据类型的转换主要用于二进制数据的编码和解码,主要用于网络传输,读写二进制文件,java和c ...
- java byte【】数组与文件读写(增加新功能)
今天在测试直接写的文章: java byte[]数组与文件读写 时,想调用FileHelper类对字节数组以追加的方式写文件,结果无论怎样竟然数据录入不全,重新看了下文件的追加模式,提供了两种方式: ...
- Java Byte取值范围
Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...
- java byte数组与String互转
java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...
- java byte数组与16进制间的相互转换
java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...
- Java byte类型转换成int类型时需要 & 0XFF的原因
Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...
- java byte to hex
String str; byte[] bs = null; bs =str.getBytes(); bs =str.getBytes("utf-8") java byte to ...
- java byte中存大于0x7E的十六进制数
在做一个Android app和arm板子交互的程序中,遇到一个问题,Java byte中无法直接存储大于0x7E的十六进制,但是C语言却可以. 出现这个状况的原因是:Java中是byte存储的是有符 ...
- Java byte[] 转C# byte[]
byte(C# 参考) byte 关键字代表一种整型,该类型按下表所示存储值: 类型 范围 大小 .NET Framework 类型 byte 0 到 255 无符号 8 位整数 Byte 参考msd ...
- java byte&0xFF
做串口端口通讯时,数据都是以byte类型发送的 普通的byte范围是-128-127,而java的byte范围是0-255 因此将数据的byte转成java的byte时,需要与0xff(1111111 ...
随机推荐
- 开放-封闭"原则(OCP)
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭. 优点: 通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵 ...
- 2016.3.16__CSS3_选择器_边框_背景_蒙版mask__第九天
CSS3 假设您认为这篇文章还不错.能够去H5专题介绍中查看很多其它相关文章. 今日课程预览 1. CSS3 的选择器 1.1 子选择器 比如:设置div下一级的p标签的颜色属性 div>p { ...
- SpringMVC导出Excel
import java.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import j ...
- 6个变态的C语言Hello World程序 之 雷人的程序语言
以下的六个程序片段主要完毕这些事情: 输出Hello, World 混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过. hello1.c ...
- Myeclipse10集成Flex4.6
安装好flash builder4.6 执行fb安装文件夹下utilities\Adobe Flash Builder 4.6 Plug-in Utility.exe 插件. 第一次选择flash b ...
- YTU 2535: C++复数运算符重载(+与<<)
2535: C++复数运算符重载(+与<<) 时间限制: 1 Sec 内存限制: 128 MB 提交: 867 解决: 532 题目描述 定义一个复数类Complex,重载运算符&qu ...
- 命令搜索命令(whereis、which)
一.whereis命名 解释:搜索系统命令所在的位置,不能查询文件 语法:whereis 命令 -b 之查找可执行的文件在哪里 -m 只查找帮助文件 二.which 命令 解释:能搜索命令所在位置, ...
- bzoj 2730: [HNOI2012]矿场搭建【tarjan】
先tarjan找割点和点双连通分量,然后对一个点双,如果没有割点,那么需要建立两个出口(割掉一个另一个备用):如果只有一个割点,出口可以设立在任意一个非割点的地方:如果有两个及以上个割点,就不用建出口 ...
- bzoj 1034: [ZJOI2008]泡泡堂BNB【贪心】
是贪心 先把两个数组排序,然后贪心的选让a数组占优的(如果没有就算输),这是最大值,最小值是2n-贪心选b数组占优 #include<iostream> #include<cstdi ...
- hdu 1043 Eight
欸我一直以为双向bfs是搜完一半再搜另一半呢,妹想到是两个一起搜 然后队列里放的结构体里不能直接存答案,所以做一个邻接表一样的东西,直接指向需要的字符即可 记录状态用康托展开来hash 以及居然是多组 ...