7得票1回答
二进制补码符号扩展 Python?

我想知道在Python中是否有一种方法可以像C/C++中一样进行二进制补码符号扩展,使用标准库(最好在位数组上)。 C/C++: // Example program #include <iostream> #include <string> int main()...

8得票2回答
2的补码中x和(-x)的意义是什么?

其中'-'表示负x,'&'表示按位与。 程序中的数字采用8位2的补码表示,我似乎找不到输入和输出之间的关联。 8 & (-8) = 8 7 & (-7) = 1 97 & (-97) = 1 也许重要的是位操作? 0000 1000 &...

8得票4回答
在C语言中,字面量和变量有什么区别(signed vs unsigned short ints)?

我在《计算机系统:程序员的视角,第二版》一书中看到了以下代码。该代码正常工作并创建所需的输出。输出可以通过有符号和无符号表示的差异来解释。 #include<stdio.h> int main() { if (-1 < 0u) { printf("-...

75得票4回答
为什么 long long 类型的 2147483647 + 1 等于 -2147483648?

为什么这段代码不能打印出相同的数字?:long long a, b; a = 2147483647 + 1; b = 2147483648; printf("%lld\n", a); printf("%lld\n", b); 我知道int变量的最大值是2147483647,因为int变量是4个...

24得票5回答
负数在内存中以二进制补码的形式存储,那么CPU如何知道它是正数还是负数?

-1可以用4位二进制数(2's complement) 1111来表示。 15也被表示为1111。 那么,当CPU从内存中获取数值时,它如何区分15和-1呢?

35得票9回答
为什么 Integer.MAX_VALUE + 1 == Integer.MIN_VALUE?

System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 这段代码输出的结果是true。 我理解在Java中int类型是32位的,不能超过231-1,但我不明白为什么将1加到MAX_VALUE上会导致结果为MIN_VAL...

238得票19回答
为什么对于带符号数,使用二进制补码比符号-大小更好?

我只是好奇为什么要使用二进制的补码来表示-1:翻转位并加上1? -1用11111111(二进制补码)表示,而不是(对我来说更直观的)10000001,这是二进制1,第一个位作为负标志。 免责声明:我不依靠二进制算术来工作!

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

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

15得票5回答
如何在C语言中检测有符号整数的编码?

ISO C标准允许使用三种编码方法来表示带符号的整数:补码、反码和原码。 有什么有效或好的方法可以在运行时(或其他时间,如果有更好的解决方案)检测编码呢?我想知道这个信息,以便为不同的可能性优化大数库。 我计划在程序每次运行时计算并将其存储在一个变量中,因此它不必非常快 - 我假设编码不会...

31得票3回答
为什么在x86(-64)上,有符号和无符号乘法是不同的指令?

我认为2的补码的整个要点在于可以使用相同的方式对有符号和无符号数字执行操作。 维基百科甚至特别列出乘法是其中受益的操作之一。那么为什么x86需要针对每种类型(mul和imul)分别提供指令?x86-64是否仍然如此?