Results 1 to 5 of 5

Thread: counting bits in byte array in Java

  1. #1
    Junior Member
    Join Date
    Apr 2002
    Posts
    5

    Unhappy counting bits in byte array in Java

    Hi,I am currently working on a program to count bits in a byte array with 8 elements in Java. that is actually 64 bits in total.
    Of course,I can cast each individual byte to integer,then keeping divide it by 2,get the remainder,until quotient is zero,just
    count remainder if remainder is 1.I think it is too messy,is there an easy and efficient way ?

    Thanks in advance for help.

    nancen

  2. #2
    Senior Member
    Join Date
    Dec 2001
    Posts
    590
    Hi, I'm sorry, but I don't exactly know what you mean. I'm kinda thinking something, but not sure if it's your problem. Could you just explain it again...more clearer? Maybe it's just me, but I need good explanations, otherwise, I dunno what's going on.



    Also, if you got the source code, can you attach it, it would help if I could see it - I could understand what you are trying to get at more.

    Greg
    \"Do you know what people are most afraid of?
    What they don\'t understand.
    When we don\'t understand, we turn to our assumptions.\"
    -- William Forrester

  3. #3
    Junior Member
    Join Date
    Apr 2002
    Posts
    5
    Hi,Greg,

    Sorry for confusion.Since it is part of a program. However,I could explain in the following way:
    I got a byte array: byte cryptogram[8];
    The value is given: cryptogram[0]= 00011010;(Actually I couldn't find syntax like this in Java,
    just assume it is a byte with value "00011010").
    cryptogram[1]=00110110;
    .........
    cryptogram[7]=00110101;
    Now what I was asked to do is count how many '1' in this byte array.
    So : cryptogram[0] has three '1', cryptogram[1] has four '1',etc,then add
    3+4+....+4;
    This is part of program to study diffusion property of an encryption algorithm called OMEA.
    The only way I could think about is:
    int a,count=0;
    for(int i=0;i<8;i++)
    {
    a=(int)cryptogram[i];
    while( a!=0)
    {
    if(a%2==1)
    count++;
    a=a/2;
    }
    }
    I found it is a bit messy,I was thinking to use one of bit operation,to get out number of 1 's in one go.Could you help me with that ?

    Thanks and regards.

    nancen

  4. #4
    Senior Member
    Join Date
    Jan 2002
    Posts
    1,207
    The way you're doing it is probably close to the best anyway, the only thing is, I'd use the logical "and" operator and logical "shift" operators instead of dividing by 2 and modulo 2

    They probably aren't any more efficient but are logically "closer" to what you want to do

    int countBits(byte b)
    {
    int c=0;
    while (b != 0) {
    if (( b & 1) != 0) c++;
    b = b >> 1;
    }
    return c;
    }

    Or something
    Or maybe even

    int countBits(byte b)
    {
    int c=0;
    while (b != 0) {
    c += (b & 1);
    b = b >> 1;
    }
    return c;
    }

  5. #5
    Junior Member
    Join Date
    Apr 2002
    Posts
    5
    Thanks,I think it is better, bit operation is always faster than others.

    nancen

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •