大部分编程语言支持基本的数据类型,形如整形、浮点型和字符、字符串类型。
char/short/int/long (long)/float/(long) double/char * (string)/bool
不同编程语言类型差异
- C90虽然引入了wchar_t, 似乎没特别的被使用。C99才引入布尔类型,这与它认为布尔是另外一种整数有关。
- C++也有wchar_t,它是比较标准的宽字节,C++11引入了char16_t和char32_t, 支持Unicode更佳。C++17引入了byte类型,比已有的char类型更清楚表达字节。
- Java用byte代表单字节,char是2字节Unicode,布尔类型是boolean.
- Python并不凸显不同长度整形类型,统一用整数类型,将list/tuple/set/dict当做基本类型提高了开发效率。
- JavaScript作为脚本语言,统一分为Number和String类型,因为更细节的整数类型似乎用途不大。
- C#引入了Decimal, 更高精度小数点适合商务金融计算。
- Fortran自然支持复数,对整形支持根据kind设定,可以是1/2/4/8字节。
signed or unsigned
- C/C++标准未规定char类型是否是有符号,也可能是unsigned.
- GCC编译参数-fsigned-char和-funsigned-char指定char符号。
- Java/C# char类型均为Unicode字符,都是无符号类型。
- C# byte和sbyte与C语言signed char和unsigned char对应。
- wchar_t必然是无符号类型。
- 整型一般都有无符号和有符号之分,注意一个特别之处C/C++格式串%o和%x仅仅代表无符号数。
位Bit
大部分计算机最小内存操作单元是字节,JESD DRAM标准DQ位宽也经常按8 bits为单位。英文字母ASCII码虽然可以优化为7位,但7不是一个计算机的好数字,按8位算是最优空间。当然,CPU也有提供位操作指令可以读取或者更新特定的比特。
标量和矢量
- 标量是对基本数据类型的另外一种称呼。
- 矢量是具有大小和方向的量,对应编程语言代表非基本类型,例如(多维)数组。
获取类型
- C语言本身没有任何方式获取变量类型。
- C++引入typeid获取变量或表达式类型。
- Java/C#/Python有很方便的方式获取变量类型,反射机制让程序员可更深入控制类型内部。