5 (decimal) in binary 00000101
-5 (two's complement) in binary 11111011
但是11111011也是251(十进制)!二进制负整数
电脑如何辨别彼此? 它是如何知道它是-5还是251?
它是相同的11111011
在此先感谢!
5 (decimal) in binary 00000101
-5 (two's complement) in binary 11111011
但是11111011也是251(十进制)!二进制负整数
电脑如何辨别彼此? 它是如何知道它是-5还是251?
它是相同的11111011
在此先感谢!
签名字节的最大值为127
。
无符号字节不能是负数。
编译器知道保存该值的变量是有符号还是无符类型,并对其进行适当处理。
准确编译器如何将带符号的8位int a = -7转换为二进制?它会产生8位值还是32位(在32位系统上)有24个零? – DrStrangeLove 2011-05-06 15:07:20
它会填满所需的大空间。但只会有两个0。 – 2011-05-08 03:50:50
如果程序选择将字节视为带符号,则运行时系统根据高位确定字节是被视为正还是负。该高位中的1(位7,从低位0开始计数)表示该数字为负数;该位位置的0表示该数字为正值。因此,在11111011的情况下,位7被设置为1,并且相应地将该数字视为负数。
如前所述,由于符号位占用一位的位置,因此数字的绝对幅度范围可以从0到127。
如果你的程序选择治疗字节为无符号,在另一方面,你会被符号位包括在大小,这样就可以从0到255
2的补设计允许使用无符号数字相同的方式将有符号数字相加或相减。所以只有两种情况下数字的签名会影响计算机的低级别。
不同的处理器对本不同的策略。 WRT orverflows,MIPS RISC架构,例如,处理使用陷阱的溢出。见http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats
据我所知,混合签署和未签名的需要,以避免在程序级别。
如果你问“程序如何知道如何解释值” - 一般来说,这是因为你已经告诉编译器你赋值给的变量的“类型”。该程序实际上并不关心0x00000101是否为“5位十进制”,它只是一个无符号整数,其值为0x00000101,它可以对无符号整数执行合法的操作,并且如果您尝试与其进行比较或执行操作,将以给定方式执行操作到不同的“类型”变量。所有数据(字符串,数字,图像,声音等等)和编译后的代码最终都是以一个大的二进制blob结尾的。
电脑其实不在乎哪个是哪个;只有程序可以。 – 2011-05-06 14:09:11