二进制(一)

在计算机中,除了十进制是有符号的外,其他如二进制、八进制、16进制都是无符号的。

计算机里的数是用二进制表示的,

最左边的这一位一般用来表示这个数是正数还是负数,这样的话这个数就是有符号整数

如果最左边这一位不用来表示正负,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整数

【1】原码、反码、补码、移码

loading

【2】十进制  <==> 二进制

//十进制整数转二进制,除2取余数
function int_decimal2binary(num, isAbs = false) {
	if(!num)return '';
	if (num < 0) {
		num = Math.abs(num);
		isAbs = true;
	}
	let rst = '';
	while (num) {
		rst += num % 2 === 0 ? '0' : '1';
		num >>= 1;
	}
	return rst.split('').reverse().join('') * (isAbs ? -1 : 1);
}


console.log(int_decimal2binary(175), (175).toString(2));//10101111
console.log(int_decimal2binary(-175), (-175).toString(2));//-10101111

//十进制小数转二进制,除2取余数
function float_decimal2binary(num, isAbs = false) {
	if(!num)return '';
	(num + '').indexOf('0.') === -1 && (num = '0.' + num);	//num补0
	if (num < 0) {
		num = Math.abs(num);
		isAbs = true;
	}
	let rst = '';
	do {
		num *= 2;
		rst += num >= 1 ? (num -= 1, '1') : '0';
	} while (num !== 0);
	return ('0.' + rst) * (isAbs ? -1 : 1);
}


console.log(float_decimal2binary(0.71875), (0.71875).toString(2));//0.10111
console.log(float_decimal2binary(-0.71875), (-0.71875).toString(2));//-0.10111

//组合起来
function decimal2binary(num, isAbs = false) {
	if (num < 0) {
		num = Math.abs(num);
		isAbs = true;
	}
	const [int, float] = (num + '').split('.');
	return (int_decimal2binary(int) + float_decimal2binary(float)) * (isAbs ? -1 : 1);
}

console.log(decimal2binary(175.71875), (175.71875).toString(2));//10101111.10111
console.log(decimal2binary(-175.71875), (-175.71875).toString(2));//-10101111.10111

最终代码

const decimal2binary = function () {
	//十进制整数转二进制,除2取余数
	function int_decimal2binary(num) {
		if (!num) return '';
		let rst = '';
		while (num) {
			rst += num % 2 === 0 ? '0' : '1';
			num >>= 1;
		}
		return rst.split('').reverse().join('');
	}

	//十进制小数转二进制,除2取余数
	function float_decimal2binary(num) {
		if (!num) return '';
		(num + '').indexOf('0.') === -1 && (num = '0.' + num);	//num补0
		let rst = '';
		do {
			num *= 2;
			rst += num >= 1 ? (num -= 1, '1') : '0';
		} while (num !== 0);
		return +('0.' + rst);
	}

	return function (num, isAbs = false) {
		if (num < 0) {
			num = Math.abs(num);
			isAbs = true;
		}
		const [int, float] = (num + '').split('.');
		return (int_decimal2binary(int) + float_decimal2binary(float)) * (isAbs ? -1 : 1);
	}
}();

console.log(decimal2binary(175), (175).toString(2));//10101111
console.log(decimal2binary(-175), (-175).toString(2));//-10101111
console.log(decimal2binary(0.71875), (0.71875).toString(2));//0.10111
console.log(decimal2binary(-0.71875), (-0.71875).toString(2));//-0.10111
console.log(decimal2binary(175.71875), (175.71875).toString(2));//10101111.10111
console.log(decimal2binary(-175.71875), (-175.71875).toString(2));//-10101111.10111

猜你喜欢

转载自blog.csdn.net/qq_39571197/article/details/82902919