我刚遇到一个面试问题,我需要获取整数的二进制表示形式,这是我应该知道的方法。例如,5以二进制形式表示为101,步骤类似于:
// 5 % 2 = 1
// 5 / 2 = 2
// result = 1;
// 2 % 2 = 0
// 2 / 2 = 1
// result = 10
// 1 % 2 = 1
// 1 / 2 = 0
// result = 101
停止条件是~~(1/2) === 0
所以我有这个:
const getBinary = (v) => {
let remainder, binary = 1;
while (true) {
remainder = v % 2;
v = ~~(v / 2);
if (v === 0) {
return binary;
}
if (remainder === 0) {
binary = binary * 10 + 1;
}
else {
binary = binary * 10;
}
}
};
console.log(getBinary(5));
这样就可以了,但是binary
变量被初始化为1。有没有一种方法可以改进它,使其可以使用负数,或者是否将0作为参数传递给函数?
答案 0 :(得分:4)
from docx import Document
from docx.shared import Inches
from docx.table import _Cell, Table
from docx.section import Sections
doc = Document(path_doc)
p = doc.add_paragraph()
r = p.add_run()
r.add_picture(path_image)
doc.save()
JavaScript固有的简单功能,无需冗长的代码。
答案 1 :(得分:2)
所以这是一种方法。它具有处理基本内容的内部功能,以及扩展到特殊情况的外部功能。我更喜欢做字符串表示。
const getBinary = v => {
if (v === 0) return '';
let remainder = v % 2;
let quotient = (v - remainder) / 2;
if (remainder === 0) {
return getBinary(quotient) + '0';
}
else {
return getBinary(quotient) + '1';
}
}
const betterGetBinary = v => {
if (v === 0) return '0';
if (v < 0) return '-' + getBinary(-v);
return getBinary(v);
}
console.log(betterGetBinary(-10));
答案 2 :(得分:1)
如果您想从头开始编写它,则可以使用如下代码:
function toBinary(n) {
n = Number(n);
if (n == 0) return '0';
var r = '';
while (n != 0) {
r = ((n&1)?'1':'0') + r;
n = n >>> 1;
}
return r;
}
console.log(toBinary(5));
console.log(toBinary(10));
console.log(toBinary(-5));
console.log(toBinary(0));
答案 3 :(得分:0)
一种快速而肮脏的解决方案,尽管它“可能”有两个缺陷:
-Math.floor()
-没有按位运算符
let getBinary = number => {
let done = false;
let resultInverted = [];
let acc = number;
while (!done) {
let reminder = acc % 2;
if (acc === 1) {
done = true;
}
acc = Math.floor(acc / 2);
resultInverted.push(reminder);
}
return Number(resultInverted.reverse().join(''));
};
console.log(typeof getBinary(2));
console.log(getBinary(5));
console.log(getBinary(127));