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 = 相反数的补码
这不就得到这个公式了吗?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论