💡

【Go言語】int型の代入で最初に0を付けて躓いた。

2022/11/11に公開

数値は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