505得票23回答
“二进制补码”是什么?

我正在参加一门计算机系统课程,其中一部分内容让我感到困难的是二进制补码。我想理解它,但是我读过的所有资料都没有给我一个清晰的结构图。我阅读了维基百科文章和其他各种文章,包括我的教科书。 什么是二进制补码,我们如何使用它,以及它如何在操作(如从有符号到无符号的强制转换,位运算和位移操作)中影响数字?

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

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

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

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

93得票20回答
Python中的二进制补码

Python中是否有一个内置函数可以将二进制字符串(例如'111111111111')转换为补码整数-1?

92得票11回答
Java中整数在位级别上是如何表示的?

我正试图理解Java如何在内部存储整数。我知道所有的Java原始整数都是带符号的,(除了short?)。这意味着一个字节中可用的位数比数字少一个。 我的问题是,所有整数(正数和负数)是否都以二进制补码形式存储,还是只有负数以二进制补码形式存储? 我看到规范中写着x位二进制补码数。但我经常感...

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个...

67得票6回答
为什么在32位计算机中,-(-2147483648)等于-2147483648?

我认为问题本身已经很明显了,可能与溢出有关,但我仍然不太理解发生了什么。在底层,按位运算发生了什么? 为什么-(-2147483648) = -2147483648 (至少在C语言中编译时)?

66得票2回答
memset如何通过-1来初始化整数数组?

manpage中关于memset的说明: #include <string.h> void *memset(void *s, int c, size_t n) The memset() function fills the first n bytes of the memor...

59得票2回答
Java中的String.format()和十六进制数

我在研究为什么String.format()的表现方式会是这样。 背景:系统编程课程,写汇编程序。 在生成目标文件时,有一个5个字符的十六进制字段,我需要用一个值来创建它。 尝试使用:String.format("%05X", decInt); 对于正数,这可以按预期工作(11 -> ...

49得票10回答
位取反运算符

为什么位运算(~0);会输出-1?在二进制中,非0应该是1。为什么呢?