马黑黑 发表于 2024-1-22 11:48

JS:进制及十进制与其它进制间的互转

本帖最后由 马黑黑 于 2024-1-22 11:53 编辑 <br /><br /><style>
.ma { font: normal 20px/26px sans-serif; }
.ma p { margin: 10px 0; }
.ma pre { padding: 12px; background: #eee; color: blue; font-size: 16px; tab-size: 4; white-space: pre-wrap; word-wrap: break-word; }
.txtGreen { color: green; }
</style>

<div class="ma">

<p>JavaScript 提供的进制表示方法共四种:十进制、二进制、十六进制、八进制。简述如下:</p>
<h2>一、进制</h2>
<p>(一)二进制 binary</p>
<p>取值 0 和 1,前缀 0b 或 0B 【例】0101,0b0101,0B0101</p>
<p>(二)八进制 octal</p>
<p>取值 0~7,前缀 0o 或 0O 【例】1502,0o1502,0O1502</p>
<p>(三)十进制 decimal</p>
<p>取值 0~9,无前缀 【例】2013</p>
<p>(四)十六进制 hexadecimal</p>
<p>取值 0~9 和 a~f,前缀 0x 或 0X 【例】10ffc6,0xffc6,0Xffc6</p>
<h2>二、进制转换</h2>
<p>(一)十进制转其它进制</p>
<p>使用 toString 方法</p>
<p>语法:数字.toString(进制基数)</p>
<p>举例如下:</p>
<pre>
let num = 200; <span class="txtGreen">/* 声明一个待转换的十进制数值 */</span>

console.log(num.toString(2));<span class="txtGreen">/* 11001000 */</span>
console.log(num.toString(8)); <span class="txtGreen">/* 310 */</span>
console.log(num.toString(16)); <span class="txtGreen">/* c8 */</span>
</pre>
<p>(二)其它进制转十进制</p>
<p>① 使用 parseInt 方法</p>
<p>语法:parseInt(str, radix) </p>
<p>parseInt 强制将字串转为整数,参数一为需要转换的进制数值字串,参数二指明原进制基数。举例:</p>
<pre>
let a = '11001000'; <span class="txtGreen">// 二进制字串</span>
console.log(parseInt(a, 2)); <span class="txtGreen">// 200</span>

let b = '310'; <span class="txtGreen">// 八进制字串</span>
console.log(parseInt(b, 8)); <span class="txtGreen">// 200</span>

let c = 'c8'; <span class="txtGreen">// 十六进制字串</span>
console.log(parseInt(c, 16)); <span class="txtGreen">// 200</span>
</pre>
<p>【注意】parseInt 方法,仅支持十六进制带前缀,二、八进制字串带前缀都会被转换为 0。</p>
<p>② 使用 Number 方法</p>
<p>语法:Number(字符串)</p>
<p>Number 将字符转为数字,需要一个字符串参数。此法需要待转换进制的字串必须带前缀。举例:</p>
<pre>
let a = '0b11001000'; <span class="txtGreen">// 二进制字串</span>
console.log(Number(a)); <span class="txtGreen">// 200</span>

let b = '0o310'; <span class="txtGreen">// 八进制字串</span>
console.log(Number(b)); <span class="txtGreen">// 200</span>

let c = '0xc8'; <span class="txtGreen">// 十六进制字串</span>
console.log(Number(c)); <span class="txtGreen">// 200</span>
</pre>
<p>③ + 方法</p>
<p>语法:+ 字符串</p>
<p>这是一元运算符(一元运算指从一个已知数演算出另一个数),真的很简单,看例子就理解了,要注意的是,进制字串必须带前缀:</p>
<pre>
let a = '0b11001000'; <span class="txtGreen">//二进制字串</span>
console.log(+ a); <span class="txtGreen">// 200</span>

let b = '0o310'; <span class="txtGreen">//八进制字串</span>
console.log(+ b); <span class="txtGreen">// 200</span>

let c = '0xc8'; <span class="txtGreen">//十六进制字串</span>
console.log(+ c); <span class="txtGreen">// 200</span>
</pre>

</div>

起个网名好难 发表于 2024-1-22 12:38



0101 默认是8进制, 1502 默认为十进制

红影 发表于 2024-1-22 13:11

看到进制有点头晕,它们还各自有自己的表达用的取值范围和前缀{:4_173:}

红影 发表于 2024-1-22 13:20

边看帖子,边跟着学习。十进制不用管,常用的,只有二、八、十六进制的需要记一下。
二、八、十六的前缀分别是 0b ( 0B);0o ( 0O);0x ( 0X)

记前缀就行,取值比较好理解,二进制的逢2就进位了,所以0-1就够了,八进制的同理,所以0-7就够了。
十六进制的,0-9的数字都需要,而且用a-f的六个字母代替10-15的数字,防止混淆。

红影 发表于 2024-1-22 13:31

进制的表述明白了,再学习一下JS里的自动转换。

首先,toString 是从最习惯的正常十进制变成光怪陆离的其他进制。(好悲催,为什么要换成不习惯的进制啊)

然后,从光怪陆离回到喜欢的十进制的方法就比较多,(这个我喜欢):
parseInt 方法,给个字符串,告诉它原来的是什么进制,然后,就回来十进制了
Number 方法,给的字符串里带了前缀,等于验明正身了,那就直接转回来了啊
console.log(+ 字符串的芳名),这个虽然也需要带前缀,但是不需要用上面两个英文单词了,真省力。

樵歌 发表于 2024-1-22 17:51

我腾云驾雾了{:4_189:}

马黑黑 发表于 2024-1-22 19:40

樵歌 发表于 2024-1-22 17:51
我腾云驾雾了

{:4_203:}

马黑黑 发表于 2024-1-22 19:42

起个网名好难 发表于 2024-1-22 12:38
0101 默认是8进制, 1502 默认为十进制

这些,JS里有相关规范,我本来也想谈谈以0前缀开头的东东,想想还是算了,先把基础的弄好

马黑黑 发表于 2024-1-22 19:43

红影 发表于 2024-1-22 13:31
进制的表述明白了,再学习一下JS里的自动转换。

首先,toString 是从最习惯的正常十进制变成光怪陆离的 ...

{:4_190:}

马黑黑 发表于 2024-1-22 19:44

红影 发表于 2024-1-22 13:11
看到进制有点头晕,它们还各自有自己的表达用的取值范围和前缀

进制转换很多场景用得上,比方讲,十六进制随机颜色

起个网名好难 发表于 2024-1-22 20:09

马黑黑 发表于 2024-1-22 19:42
这些,JS里有相关规范,我本来也想谈谈以0前缀开头的东东,想想还是算了,先把基础的弄好

【例】0101,0b0101,0B0101

【例】1502,0o1502,0O1502
多写几个字就好了
【例】二进制数 0101 可表示为 0b0101 或 0B0101

【例】八进制数 1502 可表示为 0o1502 或 0O1502

红影 发表于 2024-1-22 22:01

马黑黑 发表于 2024-1-22 19:43


我用自己的语言重复一下,多打遍字,目的是为了记住{:4_173:}

红影 发表于 2024-1-22 22:03

马黑黑 发表于 2024-1-22 19:44
进制转换很多场景用得上,比方讲,十六进制随机颜色

哦哦,怪不得看到十六进制时,脑袋里忽然闪过了颜色的编码,原来真的有关。{:4_173:}

马黑黑 发表于 2024-1-22 22:07

红影 发表于 2024-1-22 22:03
哦哦,怪不得看到十六进制时,脑袋里忽然闪过了颜色的编码,原来真的有关。

HTML和CSS最初的时候,颜色的表示法就是用 16进制的。

马黑黑 发表于 2024-1-22 22:07

红影 发表于 2024-1-22 22:01
我用自己的语言重复一下,多打遍字,目的是为了记住

挺好挺好

红影 发表于 2024-1-22 22:39

马黑黑 发表于 2024-1-22 22:07
HTML和CSS最初的时候,颜色的表示法就是用 16进制的。

这个也不懂啊,只以为它们原本就是那样的{:4_173:}

红影 发表于 2024-1-22 22:41

马黑黑 发表于 2024-1-22 22:07
挺好挺好

多谢几遍肯定好的,之前读书就是这样{:4_173:}

马黑黑 发表于 2024-1-23 08:07

红影 发表于 2024-1-22 22:41
多谢几遍肯定好的,之前读书就是这样

这是经验之谈

马黑黑 发表于 2024-1-23 08:09

红影 发表于 2024-1-22 22:39
这个也不懂啊,只以为它们原本就是那样的

后来根据需求不断扩展,能用rgb、rgba、hsl、hsla等等等等

红影 发表于 2024-1-23 10:35

马黑黑 发表于 2024-1-23 08:07
这是经验之谈

这个只能应付考试,真要记住,还得多复习几遍{:4_173:}
页: [1] 2
查看完整版本: JS:进制及十进制与其它进制间的互转