关于C对非法字符型变量(例如'23')数值处理的困惑

如题,C初学者一位,标题可能描述的不到位,请各位见谅。
在交流学习群里看到一个人发了在Dev C++中用非法字符'23'定义字符型变量并输出,结果如下:

img

群内对其展开讨论:

img

img

img

img

得出了256进制的猜想。
我也稍微进行了一下测试,结果如下:

img

以及那位匿名群友做的示意图:

img

想请教一下各位,这个'23'的编码存储原理,为什么用char定义c1 = '23'就只会存储‘3’的ASCII码,但直接输出'23'就会得到12581这种数值,而且'23'占据的存储空间是4字节呢?