bit-manipulation相关内容

最重要的设置位剩下的未设置位的数量?

假设 64 位整数 0x000000000000FFFF 表示为 00000000 00000000 00000000 0000000000000000 00000000 > 11111111 11111111 如何找到最高有效设置位(标有 > 的那个)左侧的未设置位数量? 解决方案 //清除除最低设置位以外的所有位x &= -x;//如果 x==0,加 0,否则加 x - 1.//这 ..
发布时间:2021-11-25 06:32:34 C#/.NET

如何在不求助于 BigInteger 的情况下处理 Java 中的 128 位小端乘法

我需要以最快的方式将两个 8 字节(64 位)数组相乘.字节数组是小端的.可以将数组包装在 ByteBuffer 中并作为小端处理,以轻松解析正确表示字节的 java“long"值(但不是真正的标称值,因为 java long 是 2s 补码). Java 处理大型数学的标准方法是 BigInteger.但是这种实现很慢而且没有必要,因为我非常严格地使用 64 位 x 64 位.另外,不能将 ..
发布时间:2021-11-25 06:13:39 Java开发

为什么 BinaryReader.ReadUInt32() 反转位模式?

我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read ..
发布时间:2021-11-25 05:57:28 C#/.NET

跟随位操作的优化机会?

您认为函数haswon(见下文)有优化空间吗? 我认识到将参数类型从 __int64 更改为 unsigned __int64 可以使函数更快,因此我认为可能还有优化的机会. 更详细:我正在编写一个连接四个游戏.最近我使用了 Profiler Very Sleepy 并认识到该函数 haswon 使用了大部分 cpu 时间.该函数使用一位玩家的连接四板的位板表示.我在 fourston ..
发布时间:2021-11-25 05:49:07 C/C++开发

获取 64 位整数内的位位置数组

好吧,听起来可能有点复杂,但这就是我想要做的: 以例如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 ..
发布时间:2021-11-25 05:48:57 C/C++开发

C 中对 uint64_t 变量的按位移位操作

我有以下示例代码: 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 ..
发布时间:2021-11-25 05:41:00 C#

计算 64 位(长、大)整数中的位数?

我已经阅读了关于 32 位的this SO question,但是关于 64 位的数字呢?我是否应该只屏蔽上下 4 个字节,对 32 位进行计数,然后将它们加在一起? 解决方案 您可以在这里找到 64 位版本 http://en.wikipedia.org/wiki/Hamming_weight 是这样的 static long NumberOfSetBits(long i){i ..
发布时间:2021-11-25 05:04:58 C#/.NET

计算快速对数基数 2 上限

计算 (long int)天花板(log_2(i)) 的快速方法是什么,其中输入和输出是 64 位整数?有符号或无符号整数的解是可以接受的.我怀疑最好的方法是类似于在 here,但与其尝试自己的尝试,我更愿意使用已经过充分测试的东西.通用解决方案适用于所有正值. 例如,2,3,4,5,6,7,8 的值为 1,2,2,3,3,3,3 编辑:到目前为止,最好的方法似乎是使用任意数量的快速现 ..
发布时间:2021-11-25 05:03:22 C#

Javascript 中的按位 AND 与 64 位整数

我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法. JavaScript 会将其所有双精度值转换为有符号的 32 位整数以执行按位运算 (详情). 解决方案 Javascript 将所有数字表示为 64 位 双精度 IEEE 754 浮点数(参见 ECMAscript 规范,第 8.5 节.)所有高达 2^53 的正整数都可以精确编码.较大的整数会剪 ..
发布时间:2021-11-25 05:00:36 前端开发

64位整数的log2的快速计算

一个很棒的编程资源 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), ..
发布时间:2021-11-25 04:56:43 C#

如何将 4 个 8 位坐标存储为一个整数(C#)?

假设我有以下四个变量:player1X、player1Y、player2X、player2Y.例如,它们分别具有以下值:5、10、20、12.这些值中的每一个最多为 8 位,我想将它们存储为一个整数(32 位),我该如何实现? 通过这样做,我想创建一个字典,记录游戏中某些状态发生的频率.例如,5、10、20、12 是一种状态,6、10、20、12 是另一种状态. 解决方案 可以使用Bit ..
发布时间:2021-11-24 23:55:57 C#/.NET

将 32 位变量移位 32 位有什么不好?

我最近拿起了 Bruce Schneier 的 Applied Cryptography 的副本,读得很好.我现在了解书中概述的几种算法是如何工作的,我想开始用 C 实现其中的一些算法. 许多算法的共同点是将 x 位密钥划分为几个较小的 y 位密钥.例如,Blowfish 的密钥 X 是 64 位的,但是您需要将其分成两个 32 位的一半;Xl 和 Xr. 这就是我被卡住的地方.我在 ..
发布时间:2021-11-24 23:23:26 C#

64位整数的log2的快速计算

一个很棒的编程资源 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), ..
发布时间:2021-11-24 23:22:08 C#

PHP 按位 AND (&) 返回负数

代码: echo (5243960811416 & 4040906070209050); 尝试http://phptester.net/,结果(右)将是20407554584 但在我的虚拟主机上,它给出了 -1067281896. 20407554584 是否有解决方法?是否有 32 位限制? 解决方案 经过多次搜索,我找到了 这个答案,我将其转换为 PHP: funct ..
发布时间:2021-11-24 23:20:11 PHP

为什么 abs(0x80000000) == 0x80000000?

我刚开始阅读黑客的喜悦将 abs(-231) 定义为 -231.这是为什么? 我在几个不同的系统上尝试了 printf("%x", abs(0x80000000)) 并且在所有系统上都返回 0x80000000. 解决方案 对于 32 位数据类型,没有 +2^31 的表达式,因为最大的数字是 2^31-1 ...阅读更多关于 ..
发布时间:2021-11-24 23:04:50 C#

为什么 BinaryReader.ReadUInt32() 反转位模式?

我正在尝试使用 BinaryReader 类读取二进制文件,我需要将它作为 UInt32 块读取,然后进行一些位移等后记. 但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了. 例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412. 如果我使用 Read ..
发布时间:2021-11-24 22:58:13 C#/.NET