21得票2回答
如何进行整数的二进制补码乘法和除法?

我已阅读了关于使用二进制补数进行乘法的这篇文章,但对我来说并不是很清楚。即使是在我阅读维基百科关于此问题的文章时也有困难。我想知道如何计算负数的乘法:eg: -1 with -7 should give 7. A 4-bit, 2's complement of -1 is : 1111 A ...

21得票6回答
如何检测两个二进制补码整数相乘时的溢出?

我想要将两个数字相乘,同时检测是否发生了溢出。最简单的方法是什么?

20得票2回答
如果一个系统不支持"产生负零",那么这句话的意思是什么?

C17 6.2.6.2/4说: 如果实现不支持负零,则使用将产生此类值的操作数的&、|、^、〜、<<和>>运算符的行为是未定义的。 如果我有一个二进制补码系统,它不支持负零。并且始终利用所有可能的二进制数字组合来表示一个值。因此,无论使用哪个位运算符,都不可能产生负零。...

18得票6回答
为什么要使用二进制补码?

我正在编写一个教授儿童(9岁到13岁)编程的教程。我从计算机本身开始,这与计算机科学关系不大,更多地涉及解决计算问题所涉及的过程。 基于这个起点,我引导他们理解机器可以帮助我们解决某些计算问题。人类擅长抽象思维和想象力,但是计算机在遵循严格规定的例程方面非常出色。它们可以以惊人的速度一遍又一...

18得票2回答
C++20要求使用二进制补码的影响

C++20将规定有符号整型必须使用二进制补码。鉴于(几乎?)每个实现当前都使用二进制补码,这似乎不是一个很大的变化。 但我想知道这个变化是否会将一些“未定义行为”转变为“实现定义”甚至“已定义”。 考虑绝对值函数std::abs(int)及其某些重载。 C++标准通过引用C标准来包含此函数...

16得票2回答
如何检测二进制补码中的溢出?

我发现使用 二进制补码 进行正负数相减时,会产生溢出。例如,当我从2中减去1时,结果为:2 = 0010 1 = 0001 -> -1 = 1111 2 + (-1) -> 0010 + 1111 = 10001 这里的结果有第五位为10001 - 是否溢出?我找到了下列用于检测二...

16得票3回答
2补码中的-128和128是什么?

在二进制补码中,0-127被表示为00000000到01111111。对于负数,我们将无符号表示中的所有位取反并加1以获得二进制补码。 (参考资料:http://en.wikipedia.org/wiki/Signed_number_representations#Two.27s_compl...

16得票1回答
在C++中检测一个或两个补数架构?

如何在C++中检测系统架构使用的是一补数还是二补数表示法,哪种方法最可靠?

15得票1回答
如果只需要低位结果,哪些2补数整数运算可以在不将输入高位清零的情况下使用?

在汇编编程中,经常需要从一个寄存器的低位计算出某些内容,而该寄存器并不保证其他位为零。在高级语言(如C)中,你只需将输入强制转换为小尺寸,让编译器决定是否需要单独清零每个输入的高位,或者是否可以在计算结果后截取结果的高位。 这在x86-64(也称为AMD64)中特别常见,原因有很多1,其中一...

15得票10回答
二进制补码转换

我需要将以二进制补码表示的字节转换为正整数字节。范围为-128到127映射到0到255。Examples: -128 (10000000) -> 0 , 127 (01111111) -> 255, etc. 编辑:为了澄清混淆,输入字节当然是无符号整数,范围在0到255之间。但是...