他の漢数字と異なり「〇」は新しい字であり、唐より前には現れない。後漢に完成した九章算術には「(引き算の時)同符号は引き、異符号は加える。正を無入から引いて負とし、負を無入から引いて正とする」とある[3][4]。この「無入」とは 0 のことであるが、専用の字はなく、表記には空白を用いていた。
唐の武則天(在位:690年 - 705年)が制定した則天文字に「〇」が現れるが、これは「星」の代替字であり 0 の意味はなかった。なお則天文字には、このように楷書的でない形の字がいくつかある。
718年、太史監(天文台長)の瞿曇悉達が九執暦を漢訳し、0 を点で記すインドの数字を導入した。しかし算木を用いていた中国の天文学者や数学者は受け入れなかった[5]。旧唐書(945年)は 3040 および 0 を「三千四十」、「空」と記し[6]、また新唐書(1060年)は 3201 および 0 を「三千二百一」、「空」と記している[7]。この「空」は仏教の空と同じく、サンスクリット語の ????? (シューニャ)の訳語である。現在も、朝鮮語とベトナム語は「空」を 0 の意味に用いる(?/kong と kh?ng)。また江戸時代の和算家も 0 を「空(くう)」と呼んでいた。
南宋の時代、蔡元定(1135年 - 1198年)は律呂新書の中で、118098 および 104976 を「十一萬八千□□九十八」、「十□萬四千九百七十六」と書いている[8]。この「□」は、以前から欠字を示すのに使われてきた記号、虚欠号である(中国語版: ⇒虚缺号)。秦九韶の数学九章(1247年)では、算木数字で空位および 0 に「〇」を用いている。この「〇」は「□」が変化したものであり、アラビア数字の「0」を借用したのではない[5]。ただし「□」はインドの数字のゼロに触発された可能性がある[3]。
一方「零」は説文解字にも出ている古い字だが、元々は小雨(零雨)を意味し、後にわずかな量(零細、零余)の意味にもなったが、0 の意味はなかった。孫子算経(4世紀頃)では「零」が余りの意味で使われている[9]。李冶は、測圓海鏡(1248年)の中で 1024 を「一千〇二十四」、2220302 を「二百二十二万零三百零二」と書き、「〇」と「零」を同一視している[3]。それぞれ「一千とんで二十四」、「二百二十二万あまり三百あまり二」の意味である。
現在、位取り記数法では主に「〇」を使う。熟語は必ず「零」を用いて、「零下」、「零封」などと書く。
「一」、「二」、「三」、および古字の「?」は、それぞれ 1 本、2 本、3 本、4 本の指または棒を示した指事字である。これらを「十」、「廿」、「卅」、「?」の甲骨文字と比べると、横か縦かの違いだけである。これから、算木の横式と縦式を記したものだとも言われる[10]。もしそうなら、算木の歴史は殷にまでさかのぼることになる。
古い異体字に「弌」、「弍」、「?」がある。なお、「弍」を音符、「貝」を意符とする形声字が「貳」であり、それが変化して「貮」になり、さらに簡略化して「弐」になった。
「四」は金文で始めて使われた字で、その前の甲骨文字では「?」が使われた。「?」は「三」と紛らわしいため、仮借で「四」を使うようになった。「四」は口から息が出る様子を表す象形字であり、今は意符の「口」を加えて「?」と書く。
「五」は交差する木で作られた蓋を表す象形字である[10]。5 として使うのは仮借である。祝祷を収めた器に蓋をして守ることを表す象形字が「吾」であり、「?」、「圄」にその音と意味が残っている。
「六」は小さい幕舎(テント)を表す象形字だと考えられるが、その意味で使われたことはない[10]。6 として使うのは仮借である。「六」を重ねた字が「?」であり、これが「陸」になった。「六」と「陸」は音が同じである。
「七」は小刀で骨を切る様子を表す象形字であり、7 として使うのは仮借である。元の意味は、意符の「刀」を加えて「切」と書く。
「八」は二つに分けることを表す指事字である。8 が 8 → 4 → 2 → 1 と二分できることを示すとされる。二分するという意味の「八」を含む字が、「分」や「半」である。
「九」は体を曲げた竜を示す象形字であり[10]、9 として使うのは仮借である。原義を示す字は「?」であろう。
これらは、甲骨文字では「一」、「二」、「三」、「?」を縦にしたものである。ただし縦線の下端で互いにつながっている。金文では、線の中央に点が加えられるようになった。この点が横に伸び、現在の字形になった。
「廿」の異体字に「?」がある。また、「卅」の異体字に「丗」があるが、「世」の異体字とも言われる。
「百」は「一」と「白」を合わせた字である。「白」は単に音を示す。甲骨文字では二百を「二」と「白」、三百を「三」と「白」というように組み合わせる。