Pek detay vermemişsin ama ben bu sorunu JavaScript ile şöyle çözerdim.
function binaryOp(a, b, op, resultBase = 2) {
resultBase = Number(resultBase);
let baseA, baseB;
if (a.includes('0b') && b.includes('0b')) {
// Input is binary
baseA = parseInt(a.substring(a.indexOf('0b') + 2), 2);
baseB = parseInt(b.substring(b.indexOf('0b') + 2), 2);
} else if (a.includes('0x') && b.includes('0x')) {
// Input is hexadecimal
baseA = parseInt(a.substring(a.indexOf('0x') + 2), 16);
baseB = parseInt(b.substring(b.indexOf('0x') + 2), 16);
} else {
// Assume that input is decimal
baseA = parseInt(a, 10);
baseB = parseInt(b, 10);
}
// Perform operation and convert to destination based string.
let rawResultStr;
switch (op) {
case '+':
rawResultStr = (baseA + baseB).toString(resultBase);
break;
case '-':
rawResultStr = (baseA - baseB).toString(resultBase);
break;
case '*':
rawResultStr = (baseA * baseB).toString(resultBase);
break;
case '/':
rawResultStr = (baseA / baseB).toString(resultBase);
break;
case '%':
rawResultStr = (baseA % baseB).toString(resultBase);
break;
}
// Build result string
let prepend;
switch (resultBase) {
case 2:
prepend = '0b';
break;
case 16:
prepend = '0x';
break;
default:
prepend = '';
break;
}
let append;
if (rawResultStr.includes('-')) {
// Remove negative sign and show the sign in parantheses
rawResultStr = rawResultStr.substring(1);
append = '(NEGATIVE)';
} else {
append = '(POSITIVE)';
}
// Remove floating point part
if (rawResultStr.includes('.')) {
rawResultStr = rawResultStr.substring(0, rawResultStr.indexOf('.'));
}
// Build final string
return `${prepend}${rawResultStr} ${append}`;
}
console.log('\nBINARY RESULTS');
console.log(binaryOp('0b10101010', '0b101010', '+'));
console.log(binaryOp('0b10101010', '0b101010', '-'));
console.log(binaryOp('0b10101010', '0b1010101010', '-'));
console.log(binaryOp('0b10101010', '0b101010', '*'));
console.log(binaryOp('0b10101010', '0b101010', '/'));
console.log(binaryOp('0b10101010', '0b101010', '%'));
console.log('\nHEXADECIMAL RESULTS');
console.log(binaryOp('0b10101010', '0b101010', '+', 16));
console.log(binaryOp('0b10101010', '0b101010', '-', 16));
console.log(binaryOp('0b10101010', '0b1010101010', '-', 16));
console.log(binaryOp('0b10101010', '0b101010', '*', 16));
console.log(binaryOp('0b10101010', '0b101010', '/', 16));
console.log(binaryOp('0b10101010', '0b101010', '%', 16));
console.log('\nDECIMAL RESULTS');
console.log(binaryOp('0b10101010', '0b101010', '+', 10));
console.log(binaryOp('0b10101010', '0b101010', '-', 10));
console.log(binaryOp('0b10101010', '0b1010101010', '-', 10));
console.log(binaryOp('0b10101010', '0b101010', '*', 10));
console.log(binaryOp('0b10101010', '0b101010', '/', 10));
console.log(binaryOp('0b10101010', '0b101010', '%', 10));
Bu kodları geliştirici konsolunda çalıştırırsan, yukarda verdiğin örneklerin çıktısını istediğin formatta verdiğini görebilirsin.
binaryOp fonksiyonuna ikilik, onluk, onaltılık sistemde sayılar verebilirsin. Sonucu varsayılan olarak ikilik düzende hesaplıyorum, istersen 4. argüman olarak hedef sayı sistemini girebilirsin. Ayrıca unutma ki bu kodlar küçük sayılarda doğru sonuç vermesine rağmen, JavaScript'in sayı veritipinin kısıtlamaları yüzünden 53 bitten büyük sayıların durumunda sonuç doğru olmayacaktır! Daha sofistike bir çözüm için bitshifting kullanmak daha doğru olacaktır. Yine de fikir vermesi açısından faydası olur umarım. ?
---- Mesajlar birleştirildi ----
Pardon terminal demişsin zaten, görmemişim. :) Bash scripting konusunda pek fikrim yok ne yazık ki. Yine de bakıştırayım biraz, yukardaki kodları bashe tercüme edebilirsem yazarım.