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

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

14得票2回答
将带符号的十进制数转换为使用二补码编码的十六进制数

我需要使用二进制补码将一个带符号的整数编码为十六进制数。例如,我想要将e.g. -24375 to 0xffffa0c9. 到目前为止,我一直在按照以下方式工作:parseInt(-24375).toString(2) > "-101111100110111" 这与 Wolfra...

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

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

14得票3回答
Java中将2的补码十六进制数转换为十进制数

我有一个代表2的补码数的十六进制字符串。有没有一种简单的方式(库/函数)将十六进制转换为十进制,而不直接使用其位?例如,给定左侧的十六进制,下面是期望输出:"0000" => 0 "7FFF" => 32767 (max positive number) "8000" => ...

14得票1回答
如何从八个(8)4位整数创建一个32位整数?

假设我有一个最大的32位整数 - const a = ((2 ** 32) - 1) const b = parseInt("11111111111111111111111111111111", 2) // 32 bits, each is a one! ...

13得票7回答
C编译器如何处理无符号和有符号整数?为什么无符号和有符号算术运算的汇编代码相同?

我正在阅读《CS-APPe2》这本书。C语言有无符号和有符号的int类型,在大多数架构中使用二进制补码算术来实现有符号值;但是在学习了一些汇编代码后,我发现很少有指令区分有符号和无符号。所以我的问题是: 编译器是否有责任区分有符号和无符号?如果是,它是如何做到的? 谁来实现二进制补码算术 ...

13得票5回答
C语言如何知道期望的数据类型?

如果所有的值都只是一个或多个字节,并且没有一个字节可以包含元数据,那么系统如何跟踪字节表示的数字类型?在维基百科上查看二进制补码和单点可以了解这些数字如何以二进制形式表示,但我仍然想知道编译器或处理器(我真的不确定我在处理哪个)如何确定这个字节必须是有符号整数。 这类似于收到一封加密信件,看...

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

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

12得票6回答
Python中数字的二进制补码

我正在编写代码,其中包含带有符号位(即二进制补码)的正负16位长的数字。这意味着我能够表示的最小数字是-32768,在二进制补码形式下为1000 0000 0000 0000。我能够表示的最大数字是32767,在二进制补码形式下为0111 1111 1111 1111。 我的问题在于Pyth...

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

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