Jcd.BitManipulation
2.4.11
Prefix Reserved
See the version list below for details.
dotnet add package Jcd.BitManipulation --version 2.4.11
NuGet\Install-Package Jcd.BitManipulation -Version 2.4.11
<PackageReference Include="Jcd.BitManipulation" Version="2.4.11" />
paket add Jcd.BitManipulation --version 2.4.11
#r "nuget: Jcd.BitManipulation, 2.4.11"
// Install Jcd.BitManipulation as a Cake Addin #addin nuget:?package=Jcd.BitManipulation&version=2.4.11 // Install Jcd.BitManipulation as a Cake Tool #tool nuget:?package=Jcd.BitManipulation&version=2.4.11
Jcd.BitManipulation
A .Net Standard 2.0 library adding syntactic sugar to your bit manipulation experience.
Examples
ushort data = 0b0000000000000000;
// turn on all the bits
data = data.SetBits(0, 16); // value is now 0b1111111111111111
// this is the equivalent as above
data = data.SetBits();
// Clear the middle 4 bits.
data = data.ClearBits(4, 8); // value is now 0b1111000000001111
// Toggle all the bits.
data = data.ToggleBits(); // value is now 0b0000111111110000
var finalData = data;
// read the upper byte
var upperByte = (byte) data.ReadBits(8, 8); // upperByte is now 0b00001111
// write 0b1011 into the upper nybble
upperByte = upperByte.StoreBits(0b1011, 4, 4); // upperByte is now 0b10111111
// chaining operations, the same steps and end results
data.ClearBits();
data = data.SetBits(0, 16) // value is now 0b1111111111111111
.SetBits() // this is the equivalent as above
.ClearBits(4, 8) // value is now 0b1111000000001111
.ToggleBits(); // value is now 0b0000111111110000
upperByte = ((byte) data.ReadBits(8, 8)) // extract the upper byte (0b00001111)
.StoreBits(0b1011, 4, 4); // store the value in the upper 4 bits, now upperByte is now 0b10111111
// finalData 0b0000111111110000
var beByte0 = finalData.ReadByte(0, Endian.Big); // 00001111
var leByte0 = finalData.ReadByte(0, Endian.Little); // 11110000
var mutatedData = finalData
.StoreByte(0b10111111, 0, Endian.Big)
.StoreByte(0b01010101, 0, Endian.Little ); // lower byte is now 0b01010101
; // mutatedData is now 0b1011111101010101
var beBa = mutatedData.ToByteArray(Endian.Big); // beBa=[0b10111111, 0b01010101]
var leBa = mutatedData.ToByteArray(Endian.Little); // leBa=[0b01010101, 0b10111111]
var leBaToUInt16Le = leBa.ToUInt16(Endian.Little); // leBaToUInt16Le = 0b1011111101010101
var leBaToUInt16Be = leBa.ToUInt16(Endian.Big); // leBaToUInt16Le = 0b0101010110111111
Performance Notes
If you read the code you'll notice a fair number of abstractions at play. These don't have a significant impact on release mode performance. In fact running on at roughly 3.5GHz to 4.0Ghz (my CPU auto-scales performance based on load.) doing the 6 chained operations at the end of the example below, but on the loop index instead of just zero, 10+e9 times completes in roughly 830-890ms in Release mode.
To see how it performs on your system run the code in the Main function of the examples app.
1,000,000,000 iterations with 6 operations per iteration took 868.58 ms for an average of 14.5 ns per operation.
Even more extensive performance testing is underway with version 3.0. Read below for details.
Version History
See Release Notes
Build, Code Stats and Nuget
API Documentation
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Jcd.Netstandard20.Shim (>= 1.0.1)
- System.Memory (>= 4.5.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Jcd.BitManipulation:
Package | Downloads |
---|---|
Jcd.RichEnumerations
A .netstandard 2.0 library that provides DDD-style rich enumeration base types for both _plain old classes_ and `record` types. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.0.125 | 106 | 9/13/2024 |
3.0.124 | 261 | 8/1/2024 |
3.0.121 | 248 | 4/14/2024 |
3.0.108-alpha | 157 | 4/14/2024 |
3.0.105-alpha | 83 | 4/13/2024 |
3.0.102-alpha | 111 | 4/7/2024 |
3.0.90-alpha | 102 | 4/6/2024 |
3.0.87-alpha | 96 | 4/2/2024 |
3.0.55-alpha | 68 | 4/1/2024 |
3.0.32-alpha | 99 | 3/31/2024 |
3.0.30-alpha | 83 | 3/27/2024 |
2.4.33 | 108 | 3/31/2024 |
2.4.11 | 119 | 3/23/2024 |
2.4.0 | 118 | 3/23/2024 |
2.3.0 | 109 | 3/23/2024 |
2.2.0 | 122 | 3/17/2024 |
2.1.0 | 122 | 3/14/2024 |
2.0.5 | 241 | 3/23/2023 |
1.0.30 | 418 | 10/11/2021 |
1.0.28 | 330 | 10/11/2021 |