牛客JS33_二进制转换(toString / parseInt)

本文详细介绍了JavaScript中将数字转换为二进制字符串的`toString()`方法和将字符串转换为十进制整数的`parseInt()`方法。通过实例展示了它们的用法、参数以及注意事项,强调了在进行二进制转换时指定基数的重要性。

在这里插入图片描述
解题
通过num.toString(2)能直接将num转换为2进制数格式的字符串,利用下标就能将对应值取出来。题目返回的数字是从右往左,因此下标为倒数,所以就是s.length-bit

function valueAtBit(num, bit) {
  var s = num.toString(2);
     return s[s.length - bit]; //注意理解该处
 }

Q1:s[s.length - bit]; s不应该是字符串吗,怎么可以用数组的方法来找bit位置的值
A1:js 字符串、数组是类数组,区别是字符串是不可变的,而 数组是可变的。不可变是指字符串的成员函数不会改变原始值,而创建返回一个新的字符串

Q2:用parseInt 函数可以吗
A2:parseInt(num,进制)是将num看成几进制再转化为十进制整数


一、知识点 - toString方法(number > string)

定义
toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果。

语法
NumberObject.toString(radix)

  • NumberObject可以是二进制、八进制、十进制、十六进制,以开头格式为准

参数

  • radix - (可选) 规定表示数字的基数,使 2 ~ 36 之间的整数。例如,当 radix 为 2 时,会被转换为二进制值表示的字符串。
  • 省略则默认10
  • 但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。

返回值
返回radix进制的字符串

实例

    var a = 32;
    console.log(a.toString(2));  //返回字符串100000
    console.log(a.toString(4));  //返回字符串200
    console.log(a.toString(16));  //返回字符串20
    console.log(a.toString(30));  //返回字符串12
    console.log(a.toString(32));  //返回字符串10

	var b = 010; //八进制数
	console.log(b.toString(2)); //返回字符串1000
	var c = 0x10; //十六进制数
	console.log(c.toString(2)); //返回字符串10000;

数值直接量不能直接调用 toString() 方法,必须先使用小括号或其他方法转化数字

    console.log(123.toString());  //抛出语法错误   相当于打印 123.0toString()
    console.log((123).toString());   //返回123
	var a = 123;
	console.log(a.toString());   //返回123

注意

  1. undefined和null没有toString()方法
  2. 布尔型数据true和false返回对应的’true’和’false’
  3. 数值类型的情况较复杂
  • 正浮点数及NaN、Infinity加引号返回
1.23.toString();//'1.23'
NaN.toString();//'NaN'
Infinity.toString();//'Infinity'
  • 负浮点数或加’+'号的正浮点数直接跟上.toString(),相当于先运行toString()方法,再添加正负号,转换为数字
+1.23.toString();//1.23
typeof +1.23.toString();//'number'
-1.23.toString();//-1.23
typeof -1.23.toString();//'number'
  • 整数直接跟上.toString()形式,会报错,提示无效标记,因为整数后的点会被识别为小数点,因此,为避免,需要加括号
(0).toString();//'0'
(-0).toString();//'0'
(2).toString();//'2'
(-2).toString();//'-2'

二、知识点 - parseInt() 方法 ( string > number)

定义和用法
parseInt() 函数可解析一个字符串,并返回一个十进制整数。

parseInt("10");         // 返回 10
parseInt("10.33");      // 返回 10
parseInt("10 20 30");   // 返回 10
parseInt("10 years");   // 返回 10
parseInt("years 10");   // 返回 NaN

语法
parseInt(string, radix) (和toString用法有区别:NumberObject.toString(radix)

参数
string - (必需) - 要被解析的字符串。
radix - (可选) - 表示要解析的数字的基数。该值介于 2 ~ 36 之间。

  • 省略或为 0,则radix默认为 10 。若以 “0x” 或 “0X” 开头,将radix为 16 。

  • 若radix小于 2 或者大于 36,则 parseInt() 将返回 NaN。

返回值
返回一个十进制的整数或者NaN

实例
当十进制字符串转十进制数字时,第二个参数radix可以不填

function base10(str) {
    var decimalNum = parseInt(str);
    return decimalNum;
}

但当二进制字符串转对应的十进制数字时,radix需要填2,将原值视为二进制的数

function base2(str) {
    var decimalNum = parseInt(str,2);
    console.log(decimalNum);
}
base2('3'); //NaN,因为二进制中没有3
base2('11'); //3

参考链接
CSDN - js中的toString()方法
CSDN - parseInt函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值