二进制中的负整数

时间:2011-05-06 13:59:50

标签: language-agnostic signed integer

 5 (decimal) in binary  00000101
-5 (two's complement) in binary 11111011

但是11111011也是251(十进制)!

计算机如何识别彼此? 它是如何知道它是-5还是251 ??

这是相同的11111011

提前致谢!!

4 个答案:

答案 0 :(得分:4)

有符号字节的最大值为127

无符号字节不能为负数。

编译器知道保存该值的变量是有符号类型还是无符号类型,并对其进行适当处理。

答案 1 :(得分:0)

如果程序选择将字节视为有符号,则运行时系统根据高位确定该字节是正还是负。该高位中的1(位7,从低位0开始计数)表示该数字为负;该位位置的0表示该数字为正。因此,在11111011的情况下,第7位设置为1,因此将数字视为负数。

因为符号位占据一位位置,所以该数字的绝对大小可以在0到127之间,如前所述。

如果你的程序选择将字节视为无符号,另一方面,符号位包含在幅度中,其范围可以从0到255.

答案 2 :(得分:0)

二进制补码旨在允许有符号数以无符号数相同的方式相互叠加/减去。因此,只有两种情况,数字的签名会影响计算机的低级别。

  1. 当有溢出时
  2. 当您对混合执行操作时:一个已签名,一个未签名
  3. 不同的处理器为此采取不同的策略。例如,WRIP orverflows,即MIPS RISC架构,使用陷阱处理溢出。见http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats

    据我所知,在程序级别混合使用已签名和未签名的需求。

答案 3 :(得分:0)

如果你问“程序如何知道如何解释这个值” - 通常这是因为你告诉编译器你赋值的变量的“类型”。该程序实际上并不关心 00000101 是否为“5十进制”,它只有一个无符号整数,值为 00000101 ,它可以对无符号整数执行合法操作,并且如果您尝试与变量的不同“类型”进行比较或转换,则会以给定的方式运行。

在一天结束时,编程中的所有内容都归结为二进制 - 所有数据(字符串,数字,图像,声音等等)和编译后的代码最终都会成为一个大的二进制blob。