Wednesday 29 November 2017

Java Program to implement Bit Set


Code:

import java.util.Scanner;

/** class bit set */
class BitSet
{
    private byte[] bits;
    private int bitSetSize;

    /** constructor **/
    public BitSet(int size)
    {
        bitSetSize = size;
        bits = new byte[1 + size/8];
    } 

    /** constructor **/
    public BitSet(BitSet bs)
    {
        bitSetSize = bs.bitSetSize;
        bits = new byte[bs.bits.length];
        System.arraycopy(bs.bits, 0, bits, 0, bs.bits.length);
    }

    /** function to clear all bits **/
    public void clear()
    {
        bits = new byte[bits.length];
    }

    /** function setBit - bit to be set **/
    public void setBit(int n)
    {
        bits[n / 8] |= (1 << (n % 8));
    }

    /** function getBit **/
    public boolean getBit(int n)
    {
        return ((bits[n / 8] & (1 << (n % 8))) != 0);
    }

    /** function clearBit **/
    public void clearBit(int n)
    {
        bits[n / 8] &= ((1 << (n % 8)) ^ ((1 << 8) - 1));
    }

    /** function for or **/
    public void or(BitSet set)
    {
        for (int i = 0; i < bits.length; i++)
        {
            if (i < set.bits.length)
                bits[i] |= set.bits[i];
            else
                break;
        }
    }

    /** function for  and **/
    public void and(BitSet set)
    {
        for (int i = 0; i < bits.length; i++)
        {
            if (i < set.bits.length)
                bits[i] &= set.bits[i];
            else
                bits[i] = 0;
        }
    }

    /** function to display bitset */
    public void display()
    {
        System.out.print("\nBit Set : ");
        for (int i = 0; i < bitSetSize; i++)
            if (getBit(i))
                System.out.print(i +" ");
        System.out.println();
    }    
}

/** Class BitSetTest **/
public class BitSetTest
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Bit Set Test\n");   

        System.out.println("Enter max size of Bit Set 1");
        BitSet bs1 = new BitSet(scan.nextInt() );

        char ch;
        /*  Perform bitset operations  */
        do    
        {
            System.out.println("\nBit Set Operations\n");
            System.out.println("1. set bit");
            System.out.println("2. get bit");
            System.out.println("3. clear bit");  
            System.out.println("4. clear");           

            int choice = scan.nextInt();            
            switch (choice) 
            {
            case 1 : 
                System.out.println("Enter integer element to set");
                bs1.setBit(scan.nextInt() );                     
                break;                           
            case 2 : 
                System.out.println("Enter integer element to get status");
                System.out.println("Bit Status : "+ bs1.getBit(scan.nextInt() ));         
                break;                                          
            case 3 : 
                System.out.println("Enter integer element to clear");
                bs1.clearBit(scan.nextInt() );   
                break;   
            case 4 : 
                System.out.println("Bit Set Cleared");
                bs1.clear();   
                break;            
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    
            bs1.display();

            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);                        
        } while (ch == 'Y'|| ch == 'y');    


        System.out.println("\n\nEnter max size of Bit Set 2");
        BitSet bs2 = new BitSet(scan.nextInt() );

        /*  Perform bitset operations  */
        do    
        {
            System.out.println("\nBit Set Operations\n");
            System.out.println("1. set bit");
            System.out.println("2. get bit");
            System.out.println("3. clear bit");  
            System.out.println("4. clear");           

            int choice = scan.nextInt();            
            switch (choice) 
            {
            case 1 : 
                System.out.println("Enter integer element to set");
                bs2.setBit(scan.nextInt() );                     
                break;                          
            case 2 : 
                System.out.println("Enter integer element to get status");
                System.out.println("Bit Status : "+ bs2.getBit(scan.nextInt() ));         
                break;                                          
            case 3 : 
                System.out.println("Enter integer element to clear");
                bs2.clearBit(scan.nextInt() );   
                break;   
            case 4 : 
                System.out.println("Bit Set Cleared");
                bs2.clear();   
                break;            
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    
            bs2.display();

            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);                        
        } while (ch == 'Y'|| ch == 'y');    


        BitSet temp = new BitSet(bs1);
        temp.or(bs2);
        System.out.println("\n\nBitSet1 OR BitSet2");
        temp.display();

        temp = new BitSet(bs1);
        temp.and(bs2);
        System.out.println("\nBitSet1 AND BitSet2");
        temp.display();       

    }
}


Output:

Bit Set Test

Enter max size of Bit Set 1
50

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
24

Bit Set : 24

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
6

Bit Set : 6 24

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
28

Bit Set : 6 24 28

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
5

Bit Set : 5 6 24 28

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
14

Bit Set : 5 6 14 24 28

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
2
Enter integer element to get status
14
Bit Status : true

Bit Set : 5 6 14 24 28

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
3
Enter integer element to clear
14

Bit Set : 5 6 24 28

Do you want to continue (Type y or n)

n


Enter max size of Bit Set 2
50

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
14

Bit Set : 14

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
7

Bit Set : 7 14

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
1

Bit Set : 1 7 14

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
28

Bit Set : 1 7 14 28

Do you want to continue (Type y or n)

y

Bit Set Operations

1. set bit
2. get bit
3. clear bit
4. clear
1
Enter integer element to set
5

Bit Set : 1 5 7 14 28

Do you want to continue (Type y or n)

n


BitSet1 OR BitSet2

Bit Set : 1 5 6 7 14 24 28

BitSet1 AND BitSet2

Bit Set : 5 28



More Java Programs:



















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...