Language agnostic 二进制中的负整数

Language agnostic 二进制中的负整数,language-agnostic,signed,integer,Language Agnostic,Signed,Integer,但11111111也是251(十进制) 计算机是如何区分的?? 它怎么知道是-5还是251 还是11111111 提前谢谢 有符号字节的最大值为127 无符号字节不能为负 编译器知道保存该值的变量是有符号的还是无符号的,并对其进行适当的处理。如果程序选择将字节视为有符号的,则运行时系统将根据高阶位决定将字节视为正字节还是负字节。高阶位(位7,从低阶位0开始计数)中的1表示该数字为负数;该位位置的0表示该数字为正。因此,在11111 011的情况下,位7被设置为1,并且相应地,数字被视为负数 因为

但11111111也是251(十进制)

计算机是如何区分的?? 它怎么知道是-5还是251

还是11111111


提前谢谢

有符号字节的最大值为
127

无符号字节不能为负


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

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

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


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

Two的补码被设计成允许有符号的数字以与无符号数字相同的方式进行加/减运算。因此,只有两种情况下,数字的符号性对计算机的影响程度较低

  • 当有溢流时
  • 对混合对象执行操作时:一个有符号,一个无符号
  • 不同的处理器对此采取不同的策略。例如,MIPS RISC体系结构WRT orverflows使用陷阱处理溢出。看

    据我所知,在程序级别上需要避免混合使用有符号和无符号。

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


    在一天结束时,编程中的一切都归结为二进制——所有数据(字符串、数字、图像、声音等),而编译后的代码最终只是一个大的二进制块。

    计算机实际上并不关心哪个是哪个;只有程序可以。编译器如何将有符号的8位整数a=-7转换成二进制??它将生成8位值还是32位(在32位系统上)带24个零?它将根据需要填充尽可能大的空间。但只有两个0。
     5 (decimal) in binary  00000101
    -5 (two's complement) in binary 11111011