C语言——数据类型(一)
一直以来都数据类型这一块都是模模糊糊,今天重温了一下,好像打开任督二脉一样。
1.1 数据类型
C以后的语言方向发展:
(1)C++/Java更强调类型,对类型的检查更严格
(2)Javascript,Python,PHP不看重类型,甚至不需要事先定义
整数 | char、short、int、long、long long |
浮点数 | float、double、long double、 |
逻辑 | bool |
指针 | |
自定义类型 |
其中,还用到sizeof,是一个运算符,给出某个类型或变量在内存中所占据的字节数。
1.2 整数(整数在内存中的表达形式是二进制数or补码形式)
char | 1字节 | -128-127(11111111-10000000=-1~-128;00000001~01111111=1~127) | |
short | 2字节 | -32768~32767 | |
int | 取决于CPU | ||
long |
|
其中,正数与0的存储比较好理解,但是负数怎么存储呢?
1.2.1 二进制负数
计算机之所以采用补码的形式来存储数据,意义就在于使用补码后运算逻辑更简单,同时也决定了它在运算时无需区分正负。(编译软件在编译时会把所有数据都转化成2进制补码)
例如 -7+1=-6
11111001b + 00000001b = 11111010b
再如 7-1 = 6
00000111b + 11111111b = 00000110b
之前一直有个疑问, 11111010b 既可以指-6也可以指250,到底取哪一个。其实由数据类型决定,此类型是char类型,那么11111010=-6.
1.2.2 unsigned和signed
在整形类型前加上unsigned使得它们成为无符号的整数。其中内部的二进制表达没变,变得是如何看待他们,如何输出。
比如;11111111,对于char,是-1;对于unsigned char,是255
unsigned的初衷是为了左春二进制运算,主要为了移位。
1.2.3整数越界
整数是以纯二进制方式进行计算的,所以:(还是以char类型为例)
以图的方式更好理解:顺时针+1,同理逆时针-1
1.2.4 整数的输入输出
还有很多,建议看参考书籍
1.3 浮点数
类型 | 字长 | 范围 | 有效数字 | scanf | printf |
float | 32 | 7 | %f | %f,%e | |
double | 64 | 15 | %lf | %f,%e |
float与double最大的区别在于:double在0附近的精度更大;
1.3.1 科学计数法
1.3.2 输出精度
在%和f之间加_上.n可以指定输出小数点后几位,这样的输出是做4舍5入的
1.3.3 浮点数的内部表达
1.4 字符
1.5类型转换
。。。。。。。。。
之后再整理