C#4位数据类型

时间:2017-02-06 19:16:15

标签: c# .net

C#是否有 4位数据类型?我想用一个浪费最小内存量的变量制作一个程序,因为程序会消耗很多。

例如:我需要保存一个我知道它会从0转到10并且 4位 var可以从0转移的值到15它是完美的。但我发现的最接近的是8位(1字节)数据类型字节

我想用自定义数据类型创建 c ++ dll 。像轻咬之类的东西。但是,如果这是我的问题的解决方案,我不知道从哪里开始,以及我必须做什么。

限制:创建一个字节并将其拆分为两个 NOT 一个选项。

5 个答案:

答案 0 :(得分:6)

不,c#中没有四位数据类型。

顺便提一下,四位只会存储一个0到15之间的数字,所以如果你存储0到127之间的值,它听起来并不适合。要计算给定的变量范围它有N位,使用公式(2^N)-1来计算最大值。 2 ^ 4 = 16 - 1 = 15.

如果您需要使用小于8位的数据类型以节省空间,则需要使用packed binary format和特殊代码来访问它。

例如,您可以使用AND掩码和位移来在一个字节中存储两个四位值,例如

byte source = 0xAD;
var hiNybble = (source & 0xF0) >> 4; //Left hand nybble = A
var loNyblle = (source & 0x0F);      //Right hand nybble = D

或者使用整数除法和模数,这也很有效,但可能不是那么可读:

var hiNybble = source / 16;
var loNybble = source % 16;

当然,您可以使用扩展方法。

static byte GetLowNybble(this byte input)
{
    return input % 16;
}

static byte GetHighNybble(this byte input)
{
    return input / 16;
}

var hiNybble = source.GetHighNybble();
var loNybble = source.GetLowNybble();

存储起来更容易:

var source = hiNybble * 16 + lowNybble;

只更新一个nybble更难:

var source = source & 0xF0 + loNybble;        //Update only low four bits
var source = source & 0x0F + (hiNybble << 4); //Update only high bits

答案 1 :(得分:3)

4位数据类型(AKA Nib)仅从0到15。它需要7位才能从0到127。你本质上需要一个字节。

答案 2 :(得分:1)

不,C#没有4位数字数据类型。如果您希望在一个8位字节中打包2个4位值,则需要自己编写打包和解包代码。

答案 3 :(得分:1)

不,偶数布尔值是8位大小。

您可以使用>><<运算符来存储和读取一个字节中的两个4位值。

https://msdn.microsoft.com/en-us/library/a1sway8w.aspx

https://msdn.microsoft.com/en-us/library/xt18et0d.aspx

答案 4 :(得分:0)

根据您需要处理的半字节数以及问题性能与内存使用量的关系,您可能需要查看BitArrayBitVector32类。为了传递值,你仍然需要更大的类型。

另一种选择也可能是StructLayout摆弄,但要小心龙。