2010-02-26 201 views
0

基本上我有2个无符号的8位二进制数,我需要使用布尔逻辑来找出哪个更大,我不能为我的生活弄清楚在哪里开始。使用逻辑门...布尔逻辑(逻辑门)

很明显,我必须分析每一个比特,并找出哪一个更大,但我怎么把它们放在一起?

说我有x和y,并希望返回true,如果x < y(x和y是8位无符号二进制数字)。我会如何去做这件事?

我想过要找出哪个最重要,但如果它们都是一样的呢?

任何人有任何想法?

+0

需要功课标签吗? –

回答

2

我想过要找出哪个有最重要的位,但如果它们都一样呢?

从“最高有效位”向下到“最低有效位”直到有差异为止。第一位设置为“1”的数字最大。

要实现这一点,请为每个数字使用一个“移位寄存器”,并为SR的位“out”使用一个比较器。

+0

然后我如何锁定我的递归函数,它检查一个是否比另一个大? – Cheetah

+0

你会用一个非常简单的状态机使用一个普通的“寄存器”(在这种情况下可能不是“锁存器”)。 – jldupont

0

你是那里的一部分。是的,从最重要的位开始。如果它们都相同,则移动到下一位(向右移动,朝向最低位)。当你找到一个被设置的位(而另一个不是)时,这是更大的数字。

0

事实上,你是在正确的轨道上。首先比较最重要的位。如果它们不相等,则可以以某种方式输出结果。如果它们相等,那么您只输出比较第二个最重要位的结果。等到最不重要的位。以某种方式递归。在结果中,每个比特都会有相同的门重复配置,除了最后一个会稍有变化(因为在那之后没有更多的比特)。

0

如果一个的高位是“较大”(即:它是1,另一个是0),那么比数字更大。

如果它们相同,则在下一位执行相同的测试。

所以,你要像这样类似C的伪代码(假装我们在阵列最显著在0位置的位):

// true iff x > y 
(x[0] == 1 && y[0] == 0) 
|| (
    (y[0] == x[0]) 
    && (the entire expression all over again, but with [n+1] instead of [n]) 
) 

对于您的基本情况(即:当没有更多位需要测试),根据您是否需要>或> =使用false或true。