12得票6回答
将2个字节转换为数字

我有一个控件,其中包含一个字节数组。 不时会出现两个字节,告诉我有关数组中未来项目数量的一些信息。 例如,我可能会得到: ... ... Item [4] = 7 Item [5] = 0 ... ... 这个值显然是7。 但这个呢? ... ... Item [4] = 0 ...

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

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

23得票7回答
为什么 byte b = (byte) 0xFF 等于整数 -1?

为什么 byte b = (byte) 0xFF 等于 integer -1? 例子:int value = byte b = (byte) 0xFF; System.out.println(value); 它会打印出-1吗?

12得票1回答
NEG指令如何影响x86上的标志位?

英特尔软件开发手册对neg指令如下描述: 如果源操作数为 0,则 CF 标志位设置为 0;否则设置为 1。OF、SF、ZF、AF 和 PF 标志根据结果设置。 我认为如果将 neg %eax 替换为以下代码,那么 AF 和 CF 应该被设置:not %eax # bitwise...

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

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

14得票2回答
x86中的进位/溢出和减法

我试图理解x86中的溢出和进位标志。 据我所知,对于有符号2进制数的加法,这些标志只能通过以下四种方式之一产生(我的示例是4位数): pos+pos = neg(溢出) 0111 + 0001 = 1000(7 + 1 = -8) pos+neg = pos(进位) 0011 + ...

7得票1回答
浮点数单调性

我正在阅读一本书(CSAPP)。书中写道,浮点数加法满足以下单调性:如果 a>=b,那么对于任何值的 a、b 和 x (但不包括 NaN),都有 (x + a) >= (x+b)。但是无符号或补码加法不遵守这个实数(和整数)加法的属性。 浮点数如何遵守这个属性?为什么无符号或补...

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

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

9得票4回答
检测负二进制

今天在课上,我的计算机老师正在向我们解释(或试图解释)如何使用二进制补码写负数。我的问题是: 最终用户如何确定11101100是236还是-20?我知道你可以始终检查最高有效位,但这总是100%准确的吗?负二进制数的惯例是使最高有效位表示符号吗? 附注: 为什么我们要学习二进制减法,当我们...

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

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