在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] ) 
Interesting Posts