C与数据
11种数据类型
- 整型类:int,short(短整型),long(长整型),unsigned(无符号),char(字符整型)
- 浮点类:float(单精度),double(双精度)
- C90新增:signed(有符号),void(空)
- C99新增:_Boo*l(布尔指),_Complex*(复数),_Imaginary(虚数)
存储单元
- 位:最小的存储单元,存储0或1
- 字节:常用存储单位,几乎所有机器有1字节等于8位,即1字节可以表示0-255之间的整数
- 字:自然存储单位:8位的微型计算机一字为8位,16,32位的为即一字为16位或32位
基本整型类型
- int型:储存要占1个机器字长,16位机器,范围-32768 ~ 32767目前大多数机器32位,即占4个字节,存储数字范围为:-2147483648 ~ 2147483647
- short型:存储小于等于int,-32768 ~ 32767
- long型:储存大于等于int,-2147483648 ~ 2147483647
- long long型:存储至少64位,即8个字节
- unsigned型:无符号,只能存储正整数,能存储比signed更大的整数
- 目前普遍设置:long long 64位8字节,long 32位4字节,short 16位2字节,int 16/32位 2/4字节
- 常量:超出int范围,视为long,超出long范围,视为unsigned long,继续long long, unsigned long long
- 用H/h作为short,用L/l作为long, 用LL/ll作为long long,用U/u作为unsigned,例如343H,3234L,35455LL,435345U,534546467ULL
- char型:一个字节,-128 ~ 127,ASCII编码0~127,存储绰绰有余,C语言将字符常量视为int型非char型,是否有符号看编译器
- 整型可以表示10,8,16进制,如32,032,0x32/0X32
基本浮点类型
- float:至少6位有效数字,取值至少10的-37到+37次方。通常浮点占32位,8位指数的值和符号,剩下的24位非指数的值和符号。
浮点最大:999999961690316250000000000000000000.000000
超过:1.#INF00 - double,至少13位有效数字。通常64位,剩下的32位给非指数部分。
- long double 更高的精确要求,至少比double精确
复数和虚数类型
- 复数:float_Complex,double_Complex,long double_Complex
- 虚数:float_Imaginary,double_Imaginary,long double_Imaginary
类型大小
sizeof()函数
sizeof(int),sizeof(char)等等……
问题
整型,浮点的上溢出,下溢出?
字符串与格式化输出输入
字符串 string
- 字符串数组(变量)来存储,char name[40];
- 输入scanf(“%s”,name) name是数组首地址
- 输出printf(“%s”,name)
- 数组大小sizeof(name) => 40,可以写成 sizeof name
- 字符串长度 strlen(name) =>字符实际长度
- 空字符结尾(\n)
预处理 define
- 格式 #define NAME ‘shaosuo’
- 注意是简单的替换,没有其他操作
限定符 const
- 明示常量:limits.h float.h
- imits/h:包含INT_MAX, INT_MIN 等预处理常量数值h
- float.h:包含FLT_MAX, FLT_MIN..
输出函数 printf()
转换格式
- %a/A 浮点,16进制,p计数
- %g/G 自动选择%f,%e
- %i 有符号10进制整数
- %u 无符号10进制整数
- %% 打印百分号
- %p 指针
- %o 无符号8进制
- %x 无符号16进制
转换修饰符
- 标记:-(左对齐),+(添加符号),空格(空格覆盖正号),#(防止0被删除),0(0填充符号位)
- 宽度:数字(最小字段宽度)(用于字段对齐,右对齐)
- 精度:.数字
- 类型:h(short),hh(char),j,l,ll,L(long double),t,z
返回值
#include <stdio.h>
int main(){
int a = 0, b =0;
int pn1 = printf("ok!\n"); // pn1 = 4
int pn2 = printf("ok!,%d,%d\n",a, b); // pn2 = 8
int sn1 = scanf("%d", &a, &b); // sn1 = 1
int sn2 = scanf("%d%d", &a, &b); // sn2 = 2
printf("pn1=%d, sn1=%d, pn2=%d, sn2=%