Java Tutorials - Herong's Tutorial Examples - v8.22, by Herong Yang
setBit() - Storing a Bit into a Byte Array
This section provides a tutorial example on how to set one bit into a byte array at a specific bit position setBit().
In many applications, information must be stored and operated as bit strings. Unfortunately, Java does not provide any built-in data types or classes to support bit strings. There are several third party BitString classes that you can use to store and manage your bit strings.
Another way to store and manage bit strings is to use byte arrays, byte[]. I have used them while implementing DES (Data Encryption Standard) encryption algorithm, see "Cryptography Tutorials - Herong's Tutorial Notes" at www.herongyang.com/Cryptography/.
Storing and managing bit strings in byte arrays is not that hard as long as you define a pair of setBit() and getBit() methods. Here is my set of methods used in my cryptography tutorials. Of course, there is room for improvements in these methods. Try it yourself.
1. setBit() - To set one bit to a bit string at the specified position with the specified bit value:
private static void setBit(byte[] data, int pos, int val) { int posByte = pos/8; int posBit = pos%8; byte oldByte = data[posByte]; oldByte = (byte) (((0xFF7F>>posBit) & oldByte) & 0x00FF); byte newByte = (byte) ((val<<(8-(posBit+1))) | oldByte); data[posByte] = newByte; }
Explanations:
To understand how the fourth statement works, let's assume that posBit = 2. Then the evaluation process of the statement can be described as:
0xFF7F : 11111111 11111111 11111111 01111111 >> 2 ----------------------------------------------- = 11111111 11111111 11111111 11011111 & oldByte : ???????? ???????? ???????? xxxxxxxx ----------------------------------------------- = ???????? ???????? ???????? xx0xxxxx & 0x00FF : 00000000 00000000 00000000 11111111 ----------------------------------------------- = 00000000 00000000 00000000 xx0xxxxx
The fifth statement can be described as:
val : 00000000 00000000 00000000 0000000y << 5 ----------------------------------------------- = 00000000 00000000 00000000 00y00000 | oldByte : 00000000 00000000 00000000 xx0xxxxx ----------------------------------------------- = 00000000 00000000 00000000 xxyxxxxx
Table of Contents
Execution Process, Entry Point, Input and Output
Primitive Data Types and Literals
Bits, Bytes, Bitwise and Shift Operations
►Managing Bit Strings in Byte Arrays
►setBit() - Storing a Bit into a Byte Array
getBit() - Retrieving a Bit from a Byte Array
rotateLeft() - Left Rotating All Bits in a Byte Array
bitStringTest.java - Testing Program
Reference Data Types and Variables
StringBuffer - The String Buffer Class
System Properties and Runtime Object Methods
Generic Classes and Parameterized Types
Generic Methods and Type Inference
Lambda Expressions and Method References
Java Modules - Java Package Aggregation
Execution Threads and Multi-Threading Java Programs
ThreadGroup Class and "system" ThreadGroup Tree
Synchronization Technique and Synchronized Code Blocks
Deadlock Condition Example Programs
Garbage Collection and the gc() Method
Assert Statements and -ea" Option