小屋創作

日誌2018-04-01 17:34

這數學真神奇

作者:likwueron

Javascript不知為什麼,有時會缺少一些好用的函式
不過算了,既然是你需要的,總是能在網路上查到
今天介紹一個取得副檔名的函式,另外讓各位腦力當機一下。

不同的方法,會有不同的效率,一般那些很容易想出來,對電腦來說效率通常就...
而一位網友VisioN就創出了一個有趣的方法,而且還附帶比較
filename.substr((~-filename.lastIndexOf(".") >>> 0) + 2);

要知道的是,lastIndexOf在找不到東西的時候會回傳-1
而我們的目標應該是:無限大
話是這麼說,但他想到,其實只要數字盡可能的大,對多數情形來說就可以讓substr回傳空字串了。
他主要利用>>>這個運算子的特性:只要是位元位移後,數字會改為無號的方式表示。
-1,如果是用32-bit的長度,那就是32個1(二進制),但另一方面,這數字亦可當作4294967295
所以經過>>> 0運算後,就變成正數了。
而另一方面,原本是正數的,仍不會改變。

而對於其它有找到的來說,因為只要.後面的東西,所以其實是找到的位置的再後一個,也就是lastIndexOf的結果+1
所以簡單的方法就出來了
filename.substr((filename.lastIndexOf('.') >>> 0) + 1)

這邊有個小問題,就是以.為開頭的檔案。
在linux系統下,這類檔案其實是隱藏檔,如果你預計要跨不同系統的話,這的確也該排除。
可能是為了避免溢位的問題,所以他不使用-1的方式,而是用~-
負號大家都知道,而~的效果就是讓所有的位元反轉,對人來說,這看起來就像是加了負號後再減1
而也因為前面我們讓數字少了1,所以最後的+1也要改成+2好讓結果正確。

5

1

LINE 分享

相關創作

LeetCode - 0779. K-th Symbol in Grammar 解題心得

自動領取 Pixai 每日獎勵

LeetCode - 1318. Minimum Flips to Make a OR b Equal to c 解題心得

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】