C语言的数据类型:
知识点: C语言中, unsigned 和 signed 关键字,用来修饰变量是否带符号,也就是正负. unsigned 无符号<=> 变量只能是大于等于0的数, signed 有符号 <=> 变量可以是负数.
编译器的基本数据类型变量如果不声明一般默认是有符号的.
基本数据类型:
1.整型: 整型变量表示的是整数类型的数据. 默认有符号.
整数分为 正整数, 负整数, 0. 所以计算机为了表示正负,用了第一位当符号位.
- int 基本型, 在32位和64位系统上都占4个字节. 占用内存也就是32位,因为是二进制表示,所以2^32=4294967296, 去掉一位符号为, 0占一位, 所以范围表示: -2^31 ~ (2^31) - 1<=> -2147483648 ~ 2147483647.
- short 短整型, 在32位和64位系统上都占2个字节. 占用内存16位<=>范围:-2^15 ~ (2^15) -1 <=> -32768~32767
- long 长整型, 在32位系统上是4字节,64位系统是8字节.内存如上计算.
- __int64 | long long 在VC中是__int64,在gcc中是long long, 用来表示超过了32位的整数.占用内存64位.
2.浮点型: 浮点型变量表示的是实数类型的数据.有符号而且不能用unsigned修饰.实数类型没有无符号类型.
- float 单精度浮点数 占4个字节, 占用内存是32位.
- double 双精度浮点数 占8个字节, 占用内存64位.
浮点数在计算机内用指数型式表示, 可以分解为:数符, 尾数, 指数符, 指数四部分。 数符占1位, 表示数字的正负. 指数符占1位, 表示指数的正负. 尾数表示浮点数有效数字, 即小数点后多少位. 指数存指数的有效数字. 指数占多少位, 尾数占多少位, 由计算机系统决定. 如果是数符加尾数占24位, 指数符加指数占8位 即 float. 数符加尾数占48位, 指数符加指数占16位 即 double.
3.字符类型: 字符变量表示的是单个字符类型的数据. 默认符号是根据编译器来的.
- char 字符型 占1个字节, 占用内存8位.
我们键盘上的26个字母加上大小写, 加特殊字符等按照从0~127编号, 这就是该字符的ascii码.所以char类型本质其实就是一位的整数. 注意: 在c语言中一个汉字是占2个字符的.所以需要字符数组来表示.这个很好理解,因为中文2^8=256个全部用来表示中文也不够.所以用两个字符表示, 2^16=65536个字符,就能表示几乎全部的中文了.但是其他的一些语言中文是用一个字符来表示,但是这些语言一个字符一般都是两个字节.
想要详细了解下编码方式可以参考: 编码方式
** unsigned char 和 signed char: ** 我们一般的编译器像 VC, GCC的默认char类型是有符号的,据说 arm-linux-gcc上的char类型是无符号的, 也就是unsigned char类型, 因为ascii码只有127个, 所以无符号和有符号的用法差别不大.
其他语言可能还有byte(字节)类型, 在c语言中可以用unsigned char 来模拟.
1 | //写法 |