代表8位的2个数字

时间:2011-11-29 01:43:56

标签: c bit-shift bits

我有两组值。每个都在-50到+50的范围内。

有没有办法在一个字节中表示其中两个值?  (我在C中工作,使用Vstudio 2010)。 谢谢。

澄清:值是任意整数;也就是说,值可以是 -50到+50之间的任何整数。 (所以,问题已经回答:它是“不”。)

4 个答案:

答案 0 :(得分:9)

不,不是8位。 -50到+50是101种可能性。有两个,这是10201种可能性。 8位只有256种组合。

您需要至少14位来存储两个值-50到+50。

答案 1 :(得分:1)

这取决于。这取决于几件事:

  • -50到+50范围内的值是什么类型的值
  • 字节中有多少位

如果-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范围内的值作为任意整数或任意浮点数,也不暗示这种值。除非您的问题得到澄清,否则没有一个明确的答案,例如yesno,您可以获得的最好答案是maybe

答案 2 :(得分:0)

-50到50表示范围为100.您需要在列表7位表示100的范围(7位,128个值,6位,64个值)。所以8位,不能保持全精度,有2个数字。如果你可以放弃精度,那么,可以做到。

答案 3 :(得分:0)

简答不是。

很长的答案是,在大多数架构中,一个字节是8位。一半是4位。 4位只能表示-8到7,使用二进制补码,这是在大多数架构中表示整数的主要方法。