byte int 类型的变量转换原理?? 还有啥时候用 0xFF ?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有 在网上看了这么一个咚咚 。 i = ((b[offset++] & 0xFF) << 24) | ((b[offset++] & 0xFF) << 16) | ((b[offset++] & 0xFF) << 8) | (b[offset] & 0xFF);谁知道是啥意思? 比較下面的結果byte b = -1;System.out.println(0xff & b);System.out.println(b);第一個其實是用 00000000 00000000 00000000 11111111當遮罩,所以值是255。第二個沒有,所以直接轉 -1 為 int。 所以位元運算時,要避免正負號問題,就會用0xFF。 這是計算機概論會提到的東西。一開始大家會直覺得認為,最末位當正負號這個沒問題,但為什麼不直接加正負號就好例如 00000000 00000000 00000000 00000001 是 1那讓 10000000 00000000 00000000 00000001 為 -1 不是簡單明瞭。問題就出在 0 因為如果用上述的表示法 0 就會有 +0 和 -0 這樣很怪(一補數的表示法)。這裡有詳細說明http://zh.wikipedia.org/zh-tw/%E4%BA%8C%E8%A3%9C%E6%95%B8 把 4 個 byte byte[0] byte[1] byte[2] byte[3] 按這樣順序填入 int 的4個byte。 public int getIntByBytes(byte[] arr) { byte[] temp=arr; int intValue= 0; for (int i = 0; i < temp.length; i++) { intValue+= (temp[i] & 0xFF) << (8*(3 - i)); } return intValue; } /** * 返回所选中消息类型的个数,以占位符的形式返回(二进制) * @return */ private long getTraceObjects() { long traceObjects = 0; for (int i = 0; i < chkBssapInfo.length; i++) { if (chkBssapInfo[i].isSelected()) { traceObjects += (1 << displaceIndex[i]); } } return traceObjects; } 帮助你理解一下。消息类型是用复选框来选择的 String问题 关于时间显示的问题,例如:1小时前 求过路人给个建议,关于初学struts的苦恼~ 急!(生产者消费者问题)为什么产品总数会大于5 java的颜色对话框JColorChooser怎么用啊? 请教:如何判断一个整数变量是否为空值? 有谁用过WebDAV? 对于web日志结构的分析。。 如何判断java虚拟机是否安装成功??? 这是一家什么公司(上海朋友请进) java线程的使用(生产和消费的实现) java现在用什么写图形介面程序?
i = ((b[offset++] & 0xFF) << 24) | ((b[offset++] & 0xFF) << 16) |
((b[offset++] & 0xFF) << 8) | (b[offset] & 0xFF);谁知道是啥意思?
byte b = -1;
System.out.println(0xff & b);
System.out.println(b);第一個其實是用 00000000 00000000 00000000 11111111當遮罩,所以值是255。
第二個沒有,所以直接轉 -1 為 int。
例如 00000000 00000000 00000000 00000001 是 1
那讓 10000000 00000000 00000000 00000001 為 -1 不是簡單明瞭。問題就出在 0 因為如果用上述的表示法 0 就會有 +0 和 -0 這樣很怪(一補數的表示法)。
這裡有詳細說明
http://zh.wikipedia.org/zh-tw/%E4%BA%8C%E8%A3%9C%E6%95%B8
public int getIntByBytes(byte[] arr) {
byte[] temp=arr;
int intValue= 0;
for (int i = 0; i < temp.length; i++) {
intValue+= (temp[i] & 0xFF) << (8*(3 - i));
}
return intValue;
}
* 返回所选中消息类型的个数,以占位符的形式返回(二进制)
* @return
*/
private long getTraceObjects()
{
long traceObjects = 0;
for (int i = 0; i < chkBssapInfo.length; i++)
{
if (chkBssapInfo[i].isSelected())
{
traceObjects += (1 << displaceIndex[i]);
}
}
return traceObjects;
}
帮助你理解一下。消息类型是用复选框来选择的