integer-arithmetic相关内容

Prolog:不带累加器的最大值谓词

是否有可能创建一个谓词 max/2 没有一个累加器,以便 max(List, Max) 当且仅是 true如果 Max 是 List(整数列表)的最大值? 解决方案 是的,你可以计算递归步骤之后之后的最大值.喜欢: max([M],M).% 具有一个元素的列表的最大值就是该元素.最大([H|T],M):-max(T,M1), % 先计算尾部的最大值.M 是最大值(H,M1).% 然后将实 ..
发布时间:2022-01-12 10:37:56 其他开发

8位二进制从0减1

我有 8 位 int zero = 0b00000000; 和 8 位 int one = 0b00000001;根据二进制算术规则, 0 - 1 = 1(从下一个有效位借用 1). 如果我有: int s = 零 - 一;s = -1;-1 = 0b1111111; 所有这些 1 是从哪里来的?没有什么可以借用的,因为 zero 变量中的所有位都是 0. 解决方案 这是一 ..
发布时间:2022-01-09 19:47:26 其他开发

为什么ushort + ushort 等于int?

之前今天我试图添加两个 ushorts,但我注意到我必须将结果转换回 ushort.我认为它可能已经变成了一个 uint(以防止可能的意外溢出?),但令我惊讶的是它是一个 int (System.Int32). 这是否有一些巧妙的原因,或者可能是因为 int 被视为“基本"整数类型? 示例: ushort a = 1;ushort b = 2;ushort c = a + b;// ..
发布时间:2021-12-25 13:05:56 C#/.NET

x86 上的有符号和无符号算术实现

C 语言有 char 和 int 等有符号和无符号类型.我不确定它是如何在程序集级别实现的,因为例如,在我看来,有符号和无符号的乘法会带来不同的结果,所以汇编做两个未签名和签名算术或只有一个,这在某种程度上模拟不同的情况? 解决方案 如果你查看 x86 的各种乘法指令,只查看 32bit 变体而忽略 BMI2,你会发现这些: imul r/m32(32x32->64 有符号乘法) ..
发布时间:2021-12-17 15:21:50 其他开发

如何在 16 位机器上进行 64 位乘法?

我有一个嵌入式 16 位 CPU.在这台机器上,整数是 16 位宽,它支持 32 位宽的长整数.我需要做一些需要以 64 位存储的乘法(例如,将 32 位数字乘以 16 位数字).我怎样才能在给定的约束下做到这一点?我没有数学库来做这件事. 解决方案 C 中的建议.请注意,使用内联汇编器可能更容易实现此代码,因为 C 中的进位检测似乎并不那么容易 //将 typedef 更改为编译器所期 ..
发布时间:2021-11-25 05:38:56 C#

对于无符号乘法和有符号乘法,有多少最低有效位相同?

ARM 处理器,例如,有一个 mul 指令,执行 32 位 x 32 位乘法并返回结果的最低有效 32 位.他们还有 umull 和 smull 指令,它们再次执行 32 位 x 32 位乘法,但返回完整的 64 位结果.umull 进行无符号乘法,smull 进行有符号乘法. 为什么没有必要将 mul 的未签名和签名版本分开?在 32 位 x 32 位乘法的情况下,大概在这两种情况下结果的 ..
发布时间:2021-11-17 22:37:16 其他开发

对于无符号乘法和有符号乘法,有多少最低有效位相同?

ARM 处理器,例如,有一个 mul 指令,执行 32 位 x 32 位乘法并返回结果的最低有效 32 位.他们还有 umull 和 smull 指令,它们再次执行 32 位 x 32 位乘法,但返回完整的 64 位结果.umull 进行无符号乘法,smull 进行有符号乘法. 为什么没有必要将 mul 的未签名和签名版本分开?在 32 位 x 32 位乘法的情况下,大概在这两种情况下结果的 ..
发布时间:2021-11-17 22:35:58 其他开发

长数组的精确和

为了获得 long[] 的确切总和,我使用了以下代码段. public static BigInteger sum(long[] a) {多头低价 = 0;多头高 = 0;for (final long x : a) {低 += (x & 0xFFFF_FFFFL);高 += (x > > 32);}返回 BigInteger.valueOf(high).shiftLeft(32).add(Bi ..
发布时间:2021-09-01 18:58:22 Java开发

通过列表向后循环时对“尝试用溢出减去"感到恐慌

我正在为一个向前或向后移动索引的列表编写循环方法.以下代码用于向后循环: (i-1)%list_length 在这种情况下,i 是 usize 类型,这意味着它是无符号的.如果 i 等于 0,这会导致“尝试减法溢出"错误.我尝试使用正确的转换方法来解决此问题: ((i as isize)-1)%(list_length as isize)) as usize 这会导致整数溢出. 我明 ..
发布时间:2021-07-13 21:16:04 其他开发

如何在整数算术中执行天花板除法?

它基本上返回了 box_needed.1 盒可装 10 件物品.因此,如果用户键入的项目是 102,则代码应返回 11 个框. 如果有非零余数,有没有办法向上舍入? 解决方案 对于您的用例,请使用整数算法.有一个简单的技术可以将整数地板除法转换为天花板除法: items = 102盒子大小 = 10num_boxes = (items + boxsize - 1)//boxsize ..
发布时间:2021-07-10 19:44:17 Python

如何取消设置N个最右边的设置位

有一个相对知名的技巧可以取消设置一个最右边的位: y = x&(x-1)//0b001011100&0b001011011 = 0b001011000 :) 我发现自己有一个死循环来清除n个最右边的位,但是有没有更简单的代数技巧? 假定相对较大的n(对于64位整数,n必须小于64,但通常约为20-30). //x = 0b001011100 n = 2对于(auto i = 0; ..
发布时间:2021-05-16 19:51:31 其他开发

为什么Rust的u64.pow期望使用u32?

为什么Rust的 u64 原语期望 u32 指数? 错误[E0308]:类型不匹配->src/protagonists.rs:13:25|13 |返回root.pow(self.secret)%素数;|预期的u32,找到的u64 ^^^^^^^^^^^^^帮助:您可以将u64转换为u32,如果转换后的值不合适,则可以恐慌 https://doc.rust-lang.org/std/primi ..
发布时间:2021-05-16 19:13:05 其他开发

通过消除对> =比较的需要,将punning带符号的无符号整数类型可以使边界检查更快吗?

说我的程序中有一个非常关键的性能循环,需要检查点是否在矩形内,但是我知道在编译时下界始终为0,如下所示:(x> = 0& y> = 0&& x()或 union 类似)来消除前两个比较C ++),因为符号位可以保证任何负数都会变成一个 unsigned int ,其大小足以使边界检查失 ..
发布时间:2021-05-16 19:12:45 C/C++开发