我有两组值。每个都在-50到+50的范围内。
有没有办法在一个字节中表示其中两个值? (我在C中工作,使用Vstudio 2010)。 谢谢。
澄清:值是任意整数;也就是说,值可以是 -50到+50之间的任何整数。 (所以,问题已经回答:它是“不”。)
答案 0 :(得分:9)
不,不是8位。 -50到+50是101种可能性。有两个,这是10201种可能性。 8位只有256种组合。
您需要至少14位来存储两个值-50到+50。
答案 1 :(得分:1)
这取决于。这取决于几件事:
如果-50到+50之间的值是任意浮点数或整数,则可能无法在单个字节中输入其中的2个。是否是这种情况取决于字节中的位数。在Visual C ++中,字节是8位。对于从-50到+50的任意整数,8位太少,因为其他人已经解释过了。在某些平台上,字节可以大到16位。在这种情况下,显然,您可以将-50到+50的几个整数打包成16位。 AFAIK,C / C ++中的浮点数不能小到16位或更小。
现在,如果从-50到+50的值不是任意浮点或整数值,如果这些值只能是-50或+50,那么1位对于一个这样的值就足够了。如果它们只能是-50,0或+50,2个位对于一个这样的值就足够了。如果它们只能是-50,-25,0,+ 25或+50,3个就足够了一个这样的值。
关键是,答案很大程度上取决于问题是如何制定的。您的问题没有明确定义-50到+50范围内的值作为任意整数或任意浮点数,也不暗示这种值。除非您的问题得到澄清,否则没有一个明确的答案,例如yes
或no
,您可以获得的最好答案是maybe
。
答案 2 :(得分:0)
-50到50表示范围为100.您需要在列表7位表示100的范围(7位,128个值,6位,64个值)。所以8位,不能保持全精度,有2个数字。如果你可以放弃精度,那么,可以做到。
答案 3 :(得分:0)
简答不是。
很长的答案是,在大多数架构中,一个字节是8位。一半是4位。 4位只能表示-8到7,使用二进制补码,这是在大多数架构中表示整数的主要方法。