bit-manipulation相关内容
我有一个 int 位数组(长度始终为 64),例如: 1110000100000110111001000001110010011000110011111100001011100100 我想把它写在一个 Int64(或 ulong?)变量中.怎么做? 我尝试创建一个 BitArray 然后获取 int,但它在 CopyTo 行上抛出 System.ArgumentException: p
..
假设 64 位整数 0x000000000000FFFF 表示为 00000000 00000000 00000000 0000000000000000 00000000 > 11111111 11111111 如何找到最高有效设置位(标有 > 的那个)左侧的未设置位数量? 解决方案 //清除除最低设置位以外的所有位x &= -x;//如果 x==0,加 0,否则加 x - 1.//这
..
可能的重复: 64 位移位问题 我在 Windows 8 64 位上使用 Visual Studio 2012,在调试模式下针对 x64,使用 AMD Phenom II. 所以基本上... uint64_t Foo = 0xFFFFFFFFFFFFFFFF
..
我需要以最快的方式将两个 8 字节(64 位)数组相乘.字节数组是小端的.可以将数组包装在 ByteBuffer 中并作为小端处理,以轻松解析正确表示字节的 java“long"值(但不是真正的标称值,因为 java long 是 2s 补码). Java 处理大型数学的标准方法是 BigInteger.但是这种实现很慢而且没有必要,因为我非常严格地使用 64 位 x 64 位.另外,不能将
..
我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read
..
您认为函数haswon(见下文)有优化空间吗? 我认识到将参数类型从 __int64 更改为 unsigned __int64 可以使函数更快,因此我认为可能还有优化的机会. 更详细:我正在编写一个连接四个游戏.最近我使用了 Profiler Very Sleepy 并认识到该函数 haswon 使用了大部分 cpu 时间.该函数使用一位玩家的连接四板的位板表示.我在 fourston
..
好吧,听起来可能有点复杂,但这就是我想要做的: 以例如10101010101 并返回 { 0, 2, 4, 6, 8, 10 } - 一个包含所有已设置位位置的数组 这是我的代码: UINT DQBitboard::firstBit(U64 bitboard){static const int index64[64] = {63, 0, 58, 1, 59, 47, 53, 2,6
..
我有以下示例代码: uint64_t x, y;x = ~(0xF 结果是: x=0xffffffffff0ffffffy=0xffff 谁能解释一下区别?为什么 x 在 64 位上计算而 y 只在 32 位上计算? 解决方案 默认操作是 32 位. x=~(0xf 这段代码可以分解为以下步骤: int32_t a;a=0x0000000f;a<<=24;//a=0x0f00
..
好的,让我们考虑一个 64 位数字,它的位形成一个 8x8 表. 例如 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 10 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 写成 a b c d e f g h---------
..
我已经阅读了关于 32 位的this SO question,但是关于 64 位的数字呢?我是否应该只屏蔽上下 4 个字节,对 32 位进行计数,然后将它们加在一起? 解决方案 您可以在这里找到 64 位版本 http://en.wikipedia.org/wiki/Hamming_weight 是这样的 static long NumberOfSetBits(long i){i
..
计算 (long int)天花板(log_2(i)) 的快速方法是什么,其中输入和输出是 64 位整数?有符号或无符号整数的解是可以接受的.我怀疑最好的方法是类似于在 here,但与其尝试自己的尝试,我更愿意使用已经过充分测试的东西.通用解决方案适用于所有正值. 例如,2,3,4,5,6,7,8 的值为 1,2,2,3,3,3,3 编辑:到目前为止,最好的方法似乎是使用任意数量的快速现
..
我在 javascript 中有 2 个数字,我想对其进行处理.它们都是 33 位长 在 C# 中: ((4294967296 & 4294967296 )==0) 是假的 但在 javascript 中: ((4294967296 & 4294967296 )==0) 为真 4294967296 是 ((long)1)
..
我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法. JavaScript 会将其所有双精度值转换为有符号的 32 位整数以执行按位运算 (详情). 解决方案 Javascript 将所有数字表示为 64 位 双精度 IEEE 754 浮点数(参见 ECMAscript 规范,第 8.5 节.)所有高达 2^53 的正整数都可以精确编码.较大的整数会剪
..
一个很棒的编程资源 Bit Twiddling Hacks,提出了(此处)以下方法计算 32 位整数的 log2: #define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n静态常量字符 LogTable256[256] ={-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,LT(4),
..
假设我有以下四个变量:player1X、player1Y、player2X、player2Y.例如,它们分别具有以下值:5、10、20、12.这些值中的每一个最多为 8 位,我想将它们存储为一个整数(32 位),我该如何实现? 通过这样做,我想创建一个字典,记录游戏中某些状态发生的频率.例如,5、10、20、12 是一种状态,6、10、20、12 是另一种状态. 解决方案 可以使用Bit
..
我最近拿起了 Bruce Schneier 的 Applied Cryptography 的副本,读得很好.我现在了解书中概述的几种算法是如何工作的,我想开始用 C 实现其中的一些算法. 许多算法的共同点是将 x 位密钥划分为几个较小的 y 位密钥.例如,Blowfish 的密钥 X 是 64 位的,但是您需要将其分成两个 32 位的一半;Xl 和 Xr. 这就是我被卡住的地方.我在
..
一个很棒的编程资源 Bit Twiddling Hacks,提出了(此处)以下方法计算 32 位整数的 log2: #define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n静态常量字符 LogTable256[256] ={-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,LT(4),
..
代码: echo (5243960811416 & 4040906070209050); 尝试http://phptester.net/,结果(右)将是20407554584 但在我的虚拟主机上,它给出了 -1067281896. 20407554584 是否有解决方法?是否有 32 位限制? 解决方案 经过多次搜索,我找到了 这个答案,我将其转换为 PHP: funct
..
我刚开始阅读黑客的喜悦将 abs(-231) 定义为 -231.这是为什么? 我在几个不同的系统上尝试了 printf("%x", abs(0x80000000)) 并且在所有系统上都返回 0x80000000. 解决方案 对于 32 位数据类型,没有 +2^31 的表达式,因为最大的数字是 2^31-1 ...阅读更多关于
..
我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read
..