我無法理解為什么在僅對某些數字執行 AND-Bitwise 運算子時得到這個“NaN”?請參閱我附上的圖片以清楚地了解我的問題。
顯示代碼片段
'use strict';
function getMaxLessThanK(n, k) {
let toknowNum = [];
let bitVal = [];
let topop = [];
if (2 <= n && n <= Math.pow(10, 3) && 2 <= k && k <= n) {
let z = 0;
for (let i = 1; i < n; i ) {
for (let j = 2 z; j <= n; j ) {
if (i !== j) {
toknowNum.push([i, j]);
}
}
z ;
}
toknowNum.forEach(val => {
bitVal.push(parseInt((val[0].toString(2) & val[1].toString(2)), 2))
console.log( val, parseInt((val[0].toString(2) & val[1].toString(2)), 2))
})
bitVal.sort();
bitVal.forEach(val => {
if (val < k) {
topop.push(val);
}
})
return topop.pop();
}
console.log(toknowNum, bitVal);
return 'please check enter values';
}
console.log(getMaxLessThanK(8, 4));
這是我的問題圖片
uj5u.com熱心網友回復:
這是因為bitVal.push(parseInt((val[0].toString(2) & val[1].toString(2)), 2))線路而發生的。
在您的示例中,讓我們考慮 val = [4,8] 現在,val[0].toString(2)將是100并且val[1].toString(2)將是1000.\
因此,當您執行(val[0].toString(2) & val[1].toString(2))它時"100" & "1000"(請注意,兩者都是字串)。
但是,由于 JS 不能對字串進行按位運算,這些字串會被轉換為整數(以 10 為底),所以上面的操作會是100 & 1000(注意都是轉換后的整數),這會產生一個值96(實際值后執行二進制 &)。
而現在,當你嘗試做時bitVal.push(parseInt((val[0].toString(2) & val[1].toString(2)), 2)),它會是bitVal.push(parseInt(96, 2))。因為96不是二進制數,parseInt(96,2)所以NaN.
要解決此問題,只需將此行更新為如下
bitVal.push(val[0] & val[1]):
完整代碼如下:
'use strict';
function getMaxLessThanK(n, k) {
let toknowNum = [];
let bitVal = [];
let topop = [];
if (2 <= n && n <= Math.pow(10, 3) && 2 <= k && k <= n) {
let z = 0;
for (let i = 1; i < n; i ) {
for (let j = 2 z; j <= n; j ) {
if (i !== j) {
toknowNum.push([i, j]);
}
}
z ;
}
toknowNum.forEach(val => {
bitVal.push(val[0] & val[1])
console.log(val, (val[0] & val[1]))
})
bitVal.sort();
bitVal.forEach(val => {
if (val < k) {
topop.push(val);
}
})
return topop.pop();
}
console.log(toknowNum, bitVal);
return 'please check enter values';
}
console.log(getMaxLessThanK(8, 4));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/455156.html
標籤:javascript 二进制 楠 位运算符 按位与
上一篇:通過WinAPI截屏(安全)
