💡
【Go言語】int型の代入で最初に0を付けて躓いた。
数値は0で始めると8進数
経緯
コーディングの勉強で「数値を反転させる」アルゴリズムの問題がありそこで躓いた部分を紹介します。
数値の反転とは、「123」と入力があった場合「321」と変換するアルゴリズムをコーディングするものです。
代表的な解としては以下の「10」の除算の余を変数に代入していく方法が良くとられています。
Revers.go
func main() {
num := 【元値】
revers := 【反転後の値】
for num > 0 {
revers = (revers * 10) + (num % 10)
num /= 10
}
}
出題は「123」だったのですが、ふっと「012」だったらどうなるのかと試したところ…
「1」 と表示される...えっ待ってくださいプログラムさん。反転して返ってこないのは想像していましたが「21」でもなく「1」ってどういうこと⁉ってなりました。
原因
まぁ原因は簡単で調べたらすぐ分かったんですが、数値型を「0」から始めると「8進数」で「0x」から始めると「16進数」になるみたいで、即ち10進数の「12」だと思っていた「012」は8進数で、10進数でいうと「10」になります。
元値を「10」で考えると、「1」が返ってくるのは納得。
小石には要注意。
Discussion