java判断长度为0,Java:检查长度是否为0或1

我会使用:

if ((value & (1L << x)) != 0) { // The bit was set }

(你可以用更less的括号逃脱,但我从来不记得按位运算的优先级。)

另一种select:

if (BigInteger.valueOf(value).testBit(x)) { // ... }

我怀疑是否:

if (((value >>> x) & 1) != 0) { }

..是更好的,因为价值是否长期并不重要,或者如果它更糟,因为它不明显。

汤姆·霍金 – 7月7日14:16

你也可以使用

bool isSet = ((value>>x) & 1) != 0;

编辑:“ (value>>x) & 1 ”和“ value & (1<

在这个特殊的情况下,用“ (value>>x) & 1 ”来表示有价值的符号,而用“ value & (1<

如果你喜欢在这种情况下有0,你可以使用“ >>> ”运算符,而不是“ >> ”

所以,“ ((value>>>x) & 1) != 0 ”和“ (value & (1<

你可能想看看BitSet: http : //java.sun.com/javase/6/docs/api/java/util/BitSet.html

对于第n个LSB(最低有效位),以下应该工作:

boolean isSet = (value & (1 << n)) != 0;

向右移位 x并检查最低位。

2 ^ x位的值是“variables&(1 << x)”

在Java中,以下工作正常:

if (value << ~x < 0) { // xth bit set } else { // xth bit not set }

value和x可以是int或long (并且不需要是相同的)。

非Java程序员的注意事项 :前面的expression式适用于Java,因为在该语言中,位移运算符仅适用于右侧操作数的5位(或6位,如果是long )最低位。 这隐式地将expression式转换为value << (~x & 31) (或者如果value很long则value value << (~x & 63) )。

特别是在C中,负移位计数会调用未定义的行为,所以这个testing不一定会奏效(尽pipe它可能取决于你编译器/处理器的特定组合)。

声明一个临时int并使其等于原始值。 然后转换温度>> x次,所以你想检查的位是在最后的位置。 然后执行temp&0xf来删除前面的位。 现在留下最后一位。 最后如果(y&1 == 0),如果最后一位是1,应该等于0,否则将等于1.它或者如果(y + 0x1 == 0)…不太确定。 愚弄周围,看看

如果有人对位操作符不太熟悉,那么可以尝试下面的代码以编程方式决定它。 有两种方法。

1)使用java语言function来获取二进制格式string,然后在特定位置检查字符

2)除以2,确定某个位置的位值。

public static void main(String[] args) { Integer n =1000; String binaryFormat = Integer.toString(n, 2); int binaryFormatLength = binaryFormat.length(); System.out.println("binaryFormat="+binaryFormat); for(int i = 1;i<10;i++){ System.out.println("isBitSet("+n+","+i+")"+isBitSet(n,i)); System.out.println((binaryFormatLength>=i && binaryFormat.charAt(binaryFormatLength-i)=='1')); } } public static boolean isBitSet(int number, int position){ int currPos =1; int temp = number; while(number!=0 && currPos<= position){ if(temp%2 == 1 && currPos == position) return true; else{ temp = temp/2; currPos ++; } } return false; }

产量

binaryFormat=1111101000 isBitSet(1000,1)false false isBitSet(1000,2)false false isBitSet(1000,3)false false isBitSet(1000,4)true true isBitSet(1000,5)false false isBitSet(1000,6)true true isBitSet(1000,7)true true isBitSet(1000,8)true true isBitSet(1000,9)true true

我的贡献 – 无视之前的一个

public class TestBits { public static void main(String[] args) { byte bit1 = 0b00000001; byte bit2 = 0b00000010; byte bit3 = 0b00000100; byte bit4 = 0b00001000; byte bit5 = 0b00010000; byte bit6 = 0b00100000; byte bit7 = 0b01000000; byte myValue = 9; // any value if (((myValue >>> 3) & bit1 ) != 0) { // shift 3 to test bit4 System.out.println(" ON "); } } }

我编写了一些静态类,它正在做一些位操作的东西。

public final class Bitfield { private Bitfield() {} // ******************************************************************** // * TEST // ******************************************************************** public static boolean testBit(final int pos, final int bitfield) { return (bitfield & (1 << pos)) == (1 << pos); } public static boolean testNum(final int num, final int bitfield) { return (bitfield & num) == num; } // ******************************************************************** // * SET // ******************************************************************** public static int setBit(final int pos, final int bitfield) { return bitfield | (1 << pos); } public static int addNum(final int number, final int bitfield) { return bitfield | number; } // ******************************************************************** // * CLEAR // ******************************************************************** public static int clearBit(final int pos, final int bitfield) { return bitfield ^ (1 << pos); } public static int clearNum(final int num, final int bitfield) { return bitfield ^ num; } }

如果有一些问题,请给我发电子邮件。

好编程!

消除偏移和错综复杂的问题,并为右侧and操作数使用LUT 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值