在Excel中使用除10位以外的有符号数字
有没有办法,我在Excel中缺less设置二进制数的真正的位数,或者我们坚持与10位DEC2BIN和BIN2DEC? 10位是一个奇怪的select。
理想情况下,我希望能够在真正签名的8位或真正签名的16位世界中进行select,并能够使用这些数字执行操作。 就目前而言,我不能将11111111设置为-1,而不是255.有没有其他人处理过这个问题?
提前致谢。
Excel对二进制,八进制和hex数字施加了10个字符的限制。 对于二进制,这与10位限制重合。 这个限制没什么意义,我认为每个Excel版本都保持向后兼容是一个任意的决定。
对于8位二进制补码:
=LEFT(A1)*-128 + BIN2DEC(MID(A1,2,7))
对于16位二进制,将二进制数的每一半转换为hex并连接。 您可以将结果提供给HEX2DEC
。 然后你可以像处理8位一样处理补码:
=LEFT(A1)*-32768 + HEX2DEC(BIN2HEX(MID(A1,2,7),2) & BIN2HEX(MID(A1,9,8),2))
A1中的符号位+7个数据位
=IF(LEFT(A1,1)="1",BIN2DEC(MID(A1,2,9999))-128,BIN2DEC(MID(A1,2,9999)))
例如:
DEC2BIN和BIN2DEC使用10位有符号数字,即-512到511。
但是,DEC2BIN返回的二进制表示是一个string。
DEC2BIN(7)返回“111”,而不是111。
如果您尝试使用生成的二进制数字进行math运算,则会像数字上下文中使用的任何string那样进行处理:使用base-10将其从string转换为数字。
DEC2BIN(7 + 1)返回“1000”,但DEC2BIN(7)+1返回112(即“111”+ 1)
BIN2DEC(99 + 12)返回7.(内部有三个步骤:99 + 12 – > 111 – >“111” – > 7)
为了您的需要,我build议避免使用DEC2BIN和BIN2DEC,并使用自己的VBA函数进行转换,例如: http : //www.vb-helper.com/howto_decimal_to_binary.html
你可以使用额外的参数来增强这些函数来指定signed / unsigned和8/16/32-bit,并返回NaN或二进制溢出错误。
VBA“Long”数据types是64位有符号整数(大约18位十进制数字),但是您将无法利用Excel中的/从Excel中处理15位数字而不会损失精度。
VBA“长”将没有32位无符号的麻烦。
>>>编辑纠错:VBA长是32位有符号整数。
VBA Double有一个52位的尾数,因此可用于至less48位有符号整数运算,而不会降低精度。
只需重复一下:
为32位到40位
HEX2DEC( IF(LEFT(HEX2BIN([@DH6]),1)="1","FF","") &[@DH6] &[@DH5] &[@DH4] &[@DH3] )