我必须在VHDL中将二进制数从A转移到-A . 我对两个补码表示法有一些疑问 . 例如,如果我有二进制 0000 0101
的 A(8 bit) = 5
. 从在线资料中我意识到要将其转换为二进制补码形式,我需要反转所有在最后加1的位:
0000 0101 --> 1111 1010 + 0000 0001 = 1111 1011
,这代表 -A=-5
;
我现在的疑问是关于这个最终的二进制形式可以代表 -5
和 251
,我怎么能识别它是 -5
还是 251
?
顺便说一句,这种方法不是简单地用VHDL描述的 . 你知道是否有更简单的方法吗?
1 回答
直觉上我的推理是:你使用二进制补码,这是一个带符号的数字表示,因此存在负值 . 如果存在负值,则需要一个符号位 . 这将为数字留下7位:因此您只能表示介于-128和127之间的值 . 值251不在此范围内:它不能使用8位二进制补码表示法表示 . 因此只有-5是有效的 .
在VHDL中实现二进制补码符号反转的最简单方法是使用
numeric_bit
包 .