我正在实现一个用Java代码抽象的8位加法器。该8位加法器由8全加法器电路构成.对于那些不知道全加器是什么的人来说,这是一个计算2位和的电路。
我的意图是使用一个for循环来添加每个加法器2,8位输入的对应位,以便每次for循环迭代时计算8位结果的一个新位。
是否可以使用位移位将每次迭代的新计算位存储在保存8位结果的变量中?
这里有一个例子来帮助解释我在问什么。粗体位将被移到保存结果的int中。
0b00001010
+
0b00001011
第一次迭代(添加开始于w/ LSB)
总数:1 结果: 0b00000001 携带:0
二次迭代
总数:0 结果:0b 0000001 携带:1
第三次迭代
总数:1 结果: 0b00000101 携带:0
四次迭代
总数:0 结果: 0b0000101 携带:1
第五次迭代
总数:1 结果: 0b00010101 携带:0
第六次、第七次、第七次迭代
和:分别为0、0、0 结果: 0b00010101 进位: 0,0,0
发布于 2014-12-16 20:29:46
java中的移位操作符有:>>>、<<和>>。
System.out.println(1 << 1); // print 2
System.out.println(1 << 2); // print 4
你不能用换挡从稀薄的空气中插入1。要插入1,请尝试按位运算符:、分部、和&
发布于 2014-12-16 20:42:33
如果您想得到确切的序列,可以使用以下操作来完成:
n = (n<<1 | (1&~n));
从n=0
开始,给出了0b00000001
、0b00000010
、0b00000101
、0b00001010
等。
发布于 2014-12-16 20:42:48
refred已经提到了轮班操作。在创建位掩码时,shift操作尤其有用(因此,假设设置了整数的1位,或者应该设置位字段中的连续位数时)。
请记住,a = a << 1
等于
分别为a = a*2
和a*=2
。
在解剖学上,a = a >> 2
等于
a = a/2 or a/= 2
现在,每当您没有应该设置的连续位数时,您就必须使用二进制操作,例如&和\\。因此,由于您无论如何都需要二进制操作,所以在每种情况下使用shift操作都没有多大意义,因为您可以简单地写下十六进制值。但这是有可能的。我做了几个步骤来说明这一点:
int a = 1; //0b00000001
a <<= 2 //0b00000100
a |= 1 //0b00000101
a <<= 1 //0b00001010
https://stackoverflow.com/questions/27513288
复制相似问题