C#是否有 4位数据类型?我想用一个浪费最小内存量的变量制作一个程序,因为程序会消耗很多。
例如:我需要保存一个我知道它会从0
转到10
并且 4位 var可以从0
转移的值到15
它是完美的。但我发现的最接近的是8位(1字节)数据类型字节。
我想用自定义数据类型创建 c ++ dll 。像轻咬之类的东西。但是,如果这是我的问题的解决方案,我不知道从哪里开始,以及我必须做什么。
限制:创建一个字节并将其拆分为两个 NOT 一个选项。
答案 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位值。
答案 4 :(得分:0)
根据您需要处理的半字节数以及问题性能与内存使用量的关系,您可能需要查看BitArray和BitVector32类。为了传递值,你仍然需要更大的类型。
另一种选择也可能是 StructLayout
摆弄,但要小心龙。