四大基础数据类型:
1.整数: int32, short16, char8, long32, long long(int代表一个字,不同位数的操作系统下会有不一样的长度)
2.浮点: float32(7个有效数字), double64(15个有效数字), long double
3.逻辑:bool
4.指针
5.自定义类型
不同点:
输入输出的格式化不一致:
整形:
int:%d %o %x (10,8,16进制)
long int:%ld %lo %lx (10,8,16进制)
unsigned:%u %o %x (10,8,16进制)
long unsigned:%lu %lo %lx (10,8,16进制)
浮点数:
printf:
float,double: %f (以小数形式,保留6位) %e(以指数形式)
scanf:
float: %f / %e double: %lf / %le (以小数形式,保留6位)
字符:
char: %c 输入不能加空格
sizeof函数
sizeof(i)查询某个变量在内存中占据的字节数(一个字节8个比特)
数的范围:
在计算器中,一切数据都是二进制
复数是补码 -a = 0-a (2^n-a)
整数:
一个字节(8位)可以表达的是
0000 0000 ~ 1111 1111
其中
0000 0000 ——> 0
1111 1111 ~ 1000 0000 ——> -1 ~ -128 ()
0000 0001 ~ 0111 1111 ——> 1 ~ 127
ps.哪一位上有1,代表2^(n-1)。有n位的话,-2^(n-1) ~ 2^(n-1)-1
ps.赋值char =255, int=255.打印出来后,char=-1,int=255.因为int有32位,char只有8位
浮点数:
包含 inf,-inf,nan
两个浮点数之间比较大小,可能会出现错误(f1==f2)。因为浮点数精度有限。可以采用这个方式fabs(f1-f2)<1e-12
没有特殊需要的话,整型选择int,浮点采用double。所有变量在计算机的内部都是二进制字符,具体是什么要看怎么对他解码。
逃逸字符
\b:回退 \":双引号
\t:制表 \':单引号
\n:换行 \\:反斜杠本身
\r:回车
类型转换
自动类型转换:printf会自动把小于int的转化为int,float会被自动转化为double. 两个不同类型变量运算,自动转化为大的
强制类型转换:(类型)值: (int)10.2
例:
double a=1.0,b=2.0;
int i = (int)a/b;
ps:a的值不会被强制类型转换改变,他只是在计算中输出一个转换成int的值“1”,对其本身不影响
bool类型:true false
需要调用#include<stdbool.h>
逻辑运算:!>&&>||
!非
&&与
||或
条件运算符:
(表达式)?(表达式1):(表达式2)
如果表达式满足,执行表达式1,否则执行表达式2
逗号运算
for(i=1,j=100;i<j;i++,j--)