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

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

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

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

7得票1回答
有人能够用二进制解释C#中的溢出吗?

我目前正在阅读一本关于C#编程的书,其中简要介绍了Overflow和Underflow,并且作者大致讲述了当您超出特定类型的允许范围时会发生什么。 例如: short a = 30000; short b = 30000; short sum = (short)(a + b); // Ex...

9得票3回答
在非二进制补码系统中,普通的char类型通常/总是无符号的吗?

显然,标准对此没有任何说明,但从实践/历史的角度来看,我更感兴趣:非二进制补码算术系统是否使用无符号的普通char类型?否则,你可能会遇到各种奇怪的问题,比如空终止符的两种表示形式,以及无法用char表示所有“字节”值。这种奇怪的系统确实存在吗?

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

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

8得票1回答
保证在二进制补码中左移负数时结果为负数?

假设负的二进制数是用二进制补码表示的,我们怎样才能保证符号不变呢? 假设我们用四位来表示十进制数-5: 1011,现在想左移一位以乘以2: 1011 << 1 这个操作返回0110,即6,而不是我们所希望的-10。 (我认为这只适用于第二位为0的负数,即某个范围内最小可表...

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

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

8得票1回答
关于C++20二进制补码提案R4的问题

我正在阅读C++20采用的“二进制补码提案”的第四版修订稿,并有一些问题。 在介绍中,它说: 现状,有符号整数算术在一般情况下仍然是非交换的(尽管某些实现可能保证是)。 这里的“非交换”是真正意义上的“非交换”,比如a + b与b + a吗?还是应该写成“非结合”的? 它也说: ...

9得票2回答
长整型的二进制补码

我想使用Intel I64汇编语言进行长整数运算(128位),并需要创建一个二进制补码。假设我的正值存储在RDX:RAX中。 "翻转位并加1"可以完成2的补码。因此,最朴素的实现方式为(4条指令和14字节的代码): NOT RAX NOT RDX ADD RAX,1 ; C...

153得票11回答
~x + ~y == ~(x + y) 总是错误的吗?

这段代码是否总是会计算为false?两个变量都是二进制补码的有符号整数。~x + ~y == ~(x + y) 我觉得应该有一些符合条件的数字。我尝试测试介于-5000和5000之间的数字,但从未达到相等的情况。是否有一种设置方程式以找到满足条件的解决方案? 将一个换成另一个会在我的程序中导...