我需要使用位模拟一个长字,其中数组中的每个索引都包含一个位。
然后,将新的长字通过输入传递给比较逻辑。
当我尝试比较两个longword或在i上设置longwords新值时,我得到了bit类型的set(int)方法不适用于参数(bit)
这是我的构造函数:
private bit[] longArr;
public longword() {
int i;
longArr = new bit[32];
for (i = 0; i < 32; i++) {
longArr[i] = new bit();
}
}
与逻辑
public longword and(longword other){
bit[] newLongWord = new bit[32];
int i,j;
for (i = 0; i < 32; i++) {
newLongWord[i] = new bit();
}
for (j = 0; j< 32; j++){
if(longArr[j] == other.longArr[j]){
newLongWord[0].set(this.longArr[0].and(other.longArr[0]));
}
else if((longArr[j] != other.longArr[j])){
newLongWord[0].set(this.longArr[0].and(other.longArr[0]));
}
else{
newLongWord[0].set(this.longArr[0].and(other.longArr[0]));
}
}
return other;
}
我只是想在实现正确逻辑之前可以运行代码。编辑:我的位类
public class bit implements IBit {
private int val; //provides class access to bit values
public bit() {
val = 0; //declare an initial bit value of 0
}
public void set(int val1) {
if (val >= 0 && val <= 1) { //make sure the bit is in bounds of 0-1
val = val1;
}
else {
System.out.println("Bit can only be 0 or 1"); //throw error when bit isnt 0 or 1
}
}
public void toggle() {
if (val == 0) {
val = 1;
}//switch bit value with opposite i.e 0 to 1
else{
val = 0;
}
}
public void set() {
val = 1; //sets default bit to 1 without parameter
}
public void clear() {
val = 0; //sets bit to 0
}
public int getValue() {
return val; //gets bit value
}
public bit and(bit two) {
bit finished = new bit(); //new bit instance for first bit
if (val == 0) {
finished.set(0); //sees if bit1 is set to 0 for and logic
}
else {
if (two.getValue() == 0) {
finished.set(0);//sees if bit2 is set to 0
}
else {
finished.set(1); //otherwise performs and on both bits creating a 1
}
}
return finished;
}
public bit or(bit two) {
bit finished = new bit(); //instance of bit
if (val == 1){
finished.set(1);
} //if the first bit is 1, sets 1 return bit as 1
else {
if (finished.getValue() == 1) //if first bit is not 1 but new instance is 1, set return bit = 1
finished.set(1);
else
finished.set(0);//else return bit = 0
}
return finished;
}
public bit xor(bit two) {
bit finished = new bit(); //instance of bit
if (val == 1) {
if (two.getValue() == 0){//if second bit = 0, return bit is 1
finished.set(1);
}
else{
finished.set(0);//else return bit = 0
}
}
else {
if (two.getValue() == 1){//If second bit =1 , return bit = 1
finished.set(1);
}
else{
finished.set(0);//else return bit = 0
}
}
return finished;
}
public bit not() {
if (val == 0) {//reversal of bit
set(1);
}
else {
set(0);
}
return this; // Returns the opposite of original bit val
}
public String toString() {
String finalVal = Integer.toString(val);
return finalVal;
}
}
错误消息总结起来:and()
返回一个,bit
但是set()
期望一个int
。创建一个具有以下set
功能的函数bit
:
public void set(bit other) { set(other.val); }
同样,longword.and()
可以简化逻辑:
public longword and(longword other) {
longword newLongWord = new longword();
for (int j = 0; j < longArr.length; j++) {
newLongWord.longArr[j].set(longArr[j].and(other.longArr[j]));
}
return newLongWord;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句