5 (decimal) in binary 00000101
-5 (two's complement) in binary 11111011
但是11111011也是251(十进制)!
计算机如何识别彼此? 它是如何知道它是-5还是251 ??
这是相同的11111011
提前致谢!!
答案 0 :(得分:4)
有符号字节的最大值为127
。
无符号字节不能为负数。
编译器知道保存该值的变量是有符号类型还是无符号类型,并对其进行适当处理。
答案 1 :(得分:0)
如果程序选择将字节视为有符号,则运行时系统根据高位确定该字节是正还是负。该高位中的1(位7,从低位0开始计数)表示该数字为负;该位位置的0表示该数字为正。因此,在11111011的情况下,第7位设置为1,因此将数字视为负数。
因为符号位占据一位位置,所以该数字的绝对大小可以在0到127之间,如前所述。
如果你的程序选择将字节视为无符号,另一方面,符号位包含在幅度中,其范围可以从0到255.
答案 2 :(得分:0)
二进制补码旨在允许有符号数以无符号数相同的方式相互叠加/减去。因此,只有两种情况,数字的签名会影响计算机的低级别。
不同的处理器为此采取不同的策略。例如,WRIP orverflows,即MIPS RISC架构,使用陷阱处理溢出。见http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats
据我所知,在程序级别混合使用已签名和未签名的需求。
答案 3 :(得分:0)
如果你问“程序如何知道如何解释这个值” - 通常这是因为你告诉编译器你赋值的变量的“类型”。该程序实际上并不关心 00000101 是否为“5十进制”,它只有一个无符号整数,值为 00000101 ,它可以对无符号整数执行合法操作,并且如果您尝试与变量的不同“类型”进行比较或转换,则会以给定的方式运行。
在一天结束时,编程中的所有内容都归结为二进制 - 所有数据(字符串,数字,图像,声音等等)和编译后的代码最终都会成为一个大的二进制blob。