Tag: 位操作

C#按位运算符与Ints

这个表达实际上是什么意思? 注意 – x和y变量只是样本值。 int x = 3; int y = 1; if ((x & y) !=0) 我inheritance了一个代码库,并没有达到按位运算符的速度。 我已经读过了,但仍然遗漏了一些东西。 救命!

从uint32获取特定位

我有一个像3238844000这样的UInt32变量。 现在我想得到这个数字的前两位和前两位后的6位。 这两个位都应该是int。 Decimal: 3238844000 Binary: 11000001000011001101011001100000 ^^ 和 Decimal: 3238844000 Binary: 11000001000011001101011001100000 ^^^^^^

不使用Log()查找位位置

我有一个整数输入,功率为2(1,2,4,8等)。 我希望函数在不使用log()的情况下返回位位置。 例如,对于上面的输入,将分别返回{0,1,2,3}对于C#。 另外,如果这可以在SQL中完成。 谢谢!

可变长度整数编码

我正在尝试对LZ1 / LZ77减压算法进行逆向工程。 要输出的解码缓冲器/窗口的区域的长度在文件中被编码为可变长度整数。 我已尽可能多地阅读有关可变长度整数编码的内容,在这种情况下使用的方法似乎与我见过的其他方法不同。 也许是为了避免专利问题或者只是为了混淆。 包含的代码可能不完整,但此时它至少处理了几个文件。 我无法看到,如果有的话,下面使用的公式可以简化为更简单的方法。 大多数可变长度整数编码算法使用某种循环,但对于这一点,我无法做到这一点,因为在评估每个半字节时,公式似乎并不一致。 建议非常感谢。 private static int getLength(BitReader bitStream) { const int minSize = 2; int length = 0; byte nibble3, nibble2, nibble1; nibble3 = bitStream.ReadNibble(); if (nibble3 >= 0xc) { nibble2 = bitStream.ReadNibble(); nibble1 = bitStream.ReadNibble(); if (nibble3 == 0xF & nibble2 == 0xF & nibble1 == 0xF) […]

如果位掩码包含位,我该如何检查?

我不太了解整个bitmask概念。 假设我有一个面具: var bitMask = 8 | 524288; 我不知道这是我如何组合8和524288 ,得到524296 。 但是,我该如何走另一条路? 如何检查我的位掩码,看它是否包含8和/或524288 ? 为了使它更复杂,让我们说我的位掩码是18358536 ,我需要检查8和524288是否在该位掩码中。 我到底怎么做?

什么是按位或| 操作员呢?

我正在阅读有关标志枚举和按位运算符的信息,并且遇到了以下代码: enum file{ read = 1, write = 2, readandwrite = read | write } 我在某处读到了为什么有一个包容性或陈述以及如何不能有&,但找不到文章。 有人可以刷新我的记忆并解释推理吗? 另外,我怎么说和/或? 例如。 如果dropdown1 =“你好”和/或dropdown2 =“你好”…. 谢谢

如何将4个字节组合成32位无符号整数?

我正在尝试将4个字节转换为32位无符号整数。 我想也许是这样的: UInt32 combined = (UInt32)((map[i] << 32) | (map[i+1] << 24) | (map[i+2] << 16) | (map[i+3] << 8)); 但这似乎并没有奏效。 我错过了什么?

将字节数组转换为位数组?

我如何将bytearray转换为位数组?

使用SOLR计算两个ulongs之间的“相似性”/“bitcount”

我们有一个图像数据库,我使用David Oftedal实施的Neal Krawetz博士的方法计算了PHASH。 部分示例代码计算这些长度之间的差异在这里: ulong hash1 = AverageHash(theImage); ulong hash2 = AverageHash(theOtherImage); uint BitCount(ulong theNumber) { uint count = 0; for (; theNumber > 0; theNumber >>= 8) { count += bitCounts[(theNumber & 0xFF)]; } return count; } Console.WriteLine(“Similarity: ” + ((64 – BitCount(hash1 ^ hash2)) * 100.0) / 64.0 + “%”); 挑战是我只知道其中一个哈希,我想查询SOLR以找到相似顺序的其他哈希值。 几点说明: 在这里使用SOLR(只有我有的替代品是HBASE) […]

查找具有相同内部表示的float / double的最小值/最大值

刷新浮点 (也是PDF ),IEEE-754并参与有关转换为字符串时浮点舍入的讨论 ,让我修补一下:如何获得给定浮点数的二进制表示的最大值和最小值是平等的。 免责声明 :对于本次讨论,我喜欢坚持IEEE-754所描述的32位和64位浮点。 我对扩展浮点(80位)或四边形(128位IEEE-754-2008)或任何其他标准(IEEE-854)不感兴趣。 背景 :计算机在二进制表示中表示不好。 在C#中,float在内部将此表示为3DCCCCCD (C#使用舍入到最近),将double表示为3FB999999999999A 。 相同的位模式用于十进制0.100000005 (浮点)和0.1000000000000000124 (双0.1000000000000000124 ),但不用于0.1000000000000000144 (双0.1000000000000000144 )。 为方便起见,以下C#代码给出了这些内部表示: string GetHex(float f) { return BitConverter.ToUInt32(BitConverter.GetBytes(f), 0).ToString(“X”); } string GetHex(double d) { return BitConverter.ToUInt64(BitConverter.GetBytes(d), 0).ToString(“X”); } // float Console.WriteLine(GetHex(0.1F)); // double Console.WriteLine(GetHex(0.1)); 在0.1的情况下,没有用相同的位模式表示的低十进制数,任何0.99…99将产生不同的位表示(即,浮点数为0.999999937 3F7FFFFF内部产生3F7FFFFF )。 我的问题很简单:如何找到内部存储在同一二进制表示中的给定float(或double)的最低和最高十进制值。 为什么 :(我知道你会问)在转换为字符串时从.NET中舍入时发现错误,当它从字符串转换时,找到内部精确值并更好地理解我自己的舍入错误。 我的猜测是这样的:取尾数,移除其余部分,得到其精确值,得到一个(尾数位)更高,并计算平均值:低于该值的任何东西将产生相同的位模式。 我的主要问题是:如何将小数部分作为整数(位操纵它不是我最强的资产)。 Jon Skeet的DoubleConverter课程可能会有所帮助。