我想知道一个字节的第一位有哪个值。
例如:
我有byte m = (byte) 0x8C;
我怎么知道第一位是1还是0?
任何人都可以帮助我吗?
答案 0 :(得分:21)
这取决于你的意思是“第一位”。如果您的意思是“最重要的位”,您可以使用:
// 0 or 1
int msb = (m & 0xff) >> 7;
或者,如果您不介意值为0x80或0,请使用:
// 0 or 0x80
int msb = m & 0x80;
或者事实上,作为boolean
:
// Uses the fact that byte is signed using 2s complement
// True or false
boolean msb = m < 0;
如果你的意思是最低有效位,你可以使用:
// 0 or 1
int lsb = m & 1;
答案 1 :(得分:3)
假设你的意思是最左边的位,按位,它是0x80并检查它是否为零:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x80));
return (b & (byte)0x80) < 0;
}
如果你的意思是最低位,你需要和0x01并检查一个不同的条件:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x01));
return (b & (byte)0x80) > 0;
}
答案 2 :(得分:3)
如果第一位是最低位(即位0),那么
if((m & 1) >0) ...
应该这样做。
一般来说,
if ((m & (1<<N)) > 0) ...
将为您提供是否设置位N
。
但是,如果您指的是最高位(第7位),则使用N = 7.
答案 3 :(得分:1)
使用按位和运算符。
public class BitExample {
public static void main(String args[]) throws Exception {
byte m = (byte)0x8C;
System.out.println("The first bit is " + (m & (byte)0x01));
m = (byte)0xFF;
System.out.println("The first bit is " + (m & (byte)0x01));
}
}
// output is...
The first bit is 0
The first bit is 1
答案 4 :(得分:1)
它有点像黑客,但你可以使用
if(x >> -1 != 0) // top bit set.
这适用于byte
,short
,int
,long
数据类型。
然而,对于大多数类型,最简单的方法是与0
进行比较if (x < 0) // top bit set.
适用于byte
,short
,int
,long
,float
或double
(忽略负零和负NaN,大多数人都这样做;)
对于char
类型,您需要知道位数。 ;)
if (ch >>> 15 != 0) // top bit set.