: https://i.imgur.com/ZXjoMcL.png 有興趣的人就解這段程式碼ㄅ
我這不就來了嗎(′・ω・)
稍微做一點解釋 如果有錯誤歡迎指正
#define true false
preprocessor macro
#define 的行為是在編譯器之前建立macro 替換掉要所有檔案裡要替換的文字
以#define true false來說
就是把所有程式碼裡面的true替換成false
Thread.sleep(24*60*60*1000)
程式休眠24小時
[$[$RANDOM%6]==0]&&rm -rf
Linux指令 這指令是俄羅斯輪盤
$RANDOM會回傳 0~RAND_MAX的數字
如果這個數字除以6後餘數等於0的話 就會觸發後面的 rm -rf指令
rm -rf 就是 刪除root資料夾下的所有檔案
基本上就是整台電腦GG的意思 所以是一個俄羅斯輪盤的IT梗
alias cd='rm -rf'
alias為linux設定指令別名
cd為linux用來切換資料夾的指令,rm -rf上面有提過
所以上面的指令等於 把cd設定為 rm -rf 的別名
設定後 使用者如果想用cd切換資料夾 就會把root資料夾刪光
:(){ :|:& };:
跟linux內的bash有關,俗稱fork bomb
簡化(?)過後為:
: () {
: | : &
}; :
前面的 :() 意思是定義一個名字為 ":" 的function,此function沒有參數
:|: 的意思是執行":"function的regression1並將輸出結果pipe到另一個":"的process
也就是執行一次會生出兩個":" function
然後"&"為背景執行
";"為 ":" function的定義終止符號
最後的":"就是在函數定義結束後 執行一次 ":" function
執行後會以2^N的速度新增process,會導致占用的CPU與RAM越來越多
最後會癱瘓整個系統,基本上只能重開機處理
typeof NaN
Javascript 的 NaN型態
全名是Not a Number
因為計算機科學的定義,所以在Javascript用typeof去查詢NaN的型態的話
會回傳 number 型態 但是它是Not-a-Number 有點矛盾
9+"1"==92-"1"
Javascript裡的運算子與比較子有明確規定不同型態的值進行運算時的規則
左式 9 + "1" 為 number + string 規範number須轉為string
而 string + string = string
因此左式 9 + "1" = "9" + "1" = "91"
右式 92 - "1" 為 number - string 因string不能相減,所以規範string須轉為number
而 number - number = number
因此右式 92 - "1" = 92 - 1 = 91
又 "==" 為 一般相等比較子,根據規範:
當string(A)與number(B)一般相等比較時,需做以下轉換
ToNumber(A) === B
所以原式: "91" == 91 => ToNumber("91") === 91 => 91 === 91 => true
484很神奇呢(′・ω・)a
HellWorld
通常學習程式第一件事情就是學習如何印出hello world
至於HellWorld嘛......(′・ω・)
0.1+0.2==0.3
這又是Javascript的問題
javascript對於所有number的計算都是採取64bit float型態
且使用的浮點數標準為IEEE 754
0.1轉換為二進制的IEEE 754後為 0.0001 1001 1001 1001…
是無限循環的 然而IEEE 754 只能紀錄52個尾數
因此存在誤差
0.2同理,再轉換成IEEE 754後為 0.001 1001 1001 1001…
因此此兩數本來就有誤差 相加之後 誤差就更大了
所以在javascript裡面 0.1+0.2==0.3 => false
long long ago;
long long 為int64資料型態
取值範圍為-9,223,372,036,854,775,808~9,223,372,036,854,775,807
因此在懂程式的人眼裡 這段程式的意思是 宣告一個ago變數 資料型態為 long long
而不懂程式的人眼中 這段話就有很久以前的意思