पर एक (हेक्स) हस्ताक्षरित पूर्णांक को परिवर्तित करें मेरे पास एक हेक्स संख्या के रूप में दिया गया एक हस्ताक्षरित मान है, उदाहरण के लिए 0xffeb
और इसे -21
में "सामान्य" जावास्क्रिप्ट पूर्णांक के रूप में परिवर्तित करना चाहते हैं।जावास्क्रिप्ट: जावास्क्रिप्ट मान
मैं अब तक कुछ कोड लिखा है:
function toBinary(a) { //: String
var r = '';
var binCounter = 0;
while (a > 0) {
r = a%2 + r;
a = Math.floor(a/2);
}
return r;
}
function twoscompl(a) { //: int
var l = toBinaryFill(a).length;
var msb = a >>> (l-1);
if (msb == 0) {
return a;
}
a = a-1;
var str = toBinary(a);
var nstr = '';
for (var i = 0; i < str.length; i++) {
nstr += str.charAt(i) == '1' ? '0' : '1';
}
return (-1)*parseInt(nstr);
}
समस्या मेरी समारोह दोनों नंबरों के लिए MSB के रूप में देता है कि 1 क्योंकि केवल बाइनरी प्रतिनिधित्व "स्ट्रिंग" की MSB को देखा है, है। और इस मामले के लिए दोनों संख्या 1 हैं:
-21 => 0xffeb => 1111 1111 1110 1011
21 => 0x15 => 1 0101
आप इस अधिक कुशल और अच्छे लागू करने के लिए किसी भी विचार है?
नमस्ते, mythbu
आपको कम से कम '0x10000' – xiaoyi
@xiaoyi चाहिए, ठीक है, इसे ठीक करें। –
यह सुनिश्चित नहीं है कि यह कितना महत्वपूर्ण है, लेकिन चूंकि आप 'parseInt' के साथ हेक्स के साथ काम कर रहे हैं, तो आप शायद' parseInt (a, 16) ' – Ian