verilog 中关于负数的理解

首先要说的是,二进制中关于一个负数,它的补码应该是本身按位取反加1就可以得到,这个公式学过数字电路的人都知道,但是为什么按位取反加1就可以得到这个负数的补码?可能很多人都不知道。

那么,我们就来搞清楚它!

要先入为主的引出一个概念,补码是什么?

补码:在二进制中为了保证两个相反数相加=0,提出来了一个补码的概念。

          eg:(-1)+(1)=0;用二进制怎么表示这个等式呢?

                 (1001)+(0001)= 0 ,嗯?怎么好像不对啊? 加起来不等于0啊。

                   是的,加起来确实不等于0,那么这时候就要请补码 出场了,1001的补码是1111,

                  (1111)+(0001)=0 ;这下是不是正确了?

          于是,在二进制中或者说在verilog中,我们用负数的补码来表示这个负数。

这里要说明另一个重要的概念:

        计算机是不区分二进制数是“正”还是“负”的,二进制中一个数是正数还是负数完全取决于你主观认为这个数是正还是负!

       eg:1001 我可以说这个数是9 也可以说这个数是-7。

接下来就来说为啥是按位取反再加1:

       1111+0001=0 

       0- 一个正数 = 它的相反数

      那在二进制中,正数的补码是本身.

       0 — (一个数的补码)= 相反数的补码

     => 1111+0001 -(一个数的补码)= 相反数的补码

     => 1111 - (一个数的补码) +0001 =  相反数的补码

       1111- (一个数的补码) 是啥?   不正是对这个数按位取反么

     => 按位取反+ 0001 = 相反数的补码

这不就得到这个公式了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值