开山鼻祖
Unix 和C语言的开发者是同一人,名字叫丹尼斯·里奇(Dennis MacAlistair Ritchie)。
数据类型(Data Type)
- char 字符型 字长1
- short 短整型 字长2
- int 整形 字长4
- long 长整型 字长4
- float 单精度浮点型 字长4
- double 双精度浮点型 字长8
- void 无类型
整形的长度
C语言并没有严格规定 short、int、long 的长度,只做了宽泛的限制:
- short 至少占用 2 个字节。
- int 建议为一个机器字长。32 位环境下机器字长为 4 字节,64 位环境下机器字长为 8 字节。
- short 的长度不能大于 int,long 的长度不能小于 int。
总结起来,它们的长度(所占字节数)关系为:
2 ≤ short ≤ int ≤ long
获取数据类型长度的操作符:sizeof(可以把操作符理解为语言内置的,最基础的函数,不可代替的函数)
关于定义一个整形的思考
一般来说Int字节数是根据机器字长决定(一个机器字长)的,一般会向下兼容
即8位 16位 32位 64 位(一般代表通用寄存器的数字字长,机器总线最大数,也代表寻址能力)那么回到主题,在编译器中 写 Int a = 123456,他是如何被存到寄存器进而被放到内存中首先设计到编译原理的知识。上面定义这句话会先进行词法分析,被拆分成 int a = 123456四个字符标记流。这个标记流会生成语法树。编译器解析语法树会生成对应的汇编代码,有的可能直接生成机器码,看编译器的实现了。
然后送到寄存器,CPU调度存储器,通过电位脉冲的方式实现读写磁盘。注意,基本数据结构类型是没有大小限制的。
C/C++ 可以给 Int a赋值任何值,超过64为也没问题,他只是按照最大数字总线去寻址,C#安全模式下不可以,估计内部代码有限制,非安全模式下可以。
浙公网安备 33010602011771号