常量:#define const 字符串常量
1 8 10 16 进制转换
sizeof关键字
变量 int folat char
类型限定 const volatile register
输入输出 printf scanf
运算符 = + - * / % += -= *= /= %= ++ -- , 运算符优先级
代码块{}
类型转换
常量就是在程序中不可变化的量,常量是不可被赋值的。
#define的本质就是简单的文本替换
通过#define定义的常量,在C语言里面一般叫宏定义
const定义一个变量,但是这个变量的值只能在定义的时候赋予,之后就不可以修改。
对于const类型的变量,一定要在定义的时候给变量赋初值,不然定义之后就无法赋值了。
在C语言当中“”引用的字符串都是字符串常量,常量一旦定义也是不可以被修改的。
计算机内部都是二进制的,一个二进制的位,就叫做一个bit,就是一位
逢二加1,在二进制表达数的时候是只有0和1,而没有2这个数的
二进制最大表示的数,就是2几次幂
对于8位的CPU来讲,最大表达的数是2的8次幂
逢10加1,只有从0 到9的数,没有10这个数,
从0到7,逢8加1
在C语言中八进制是数字前面加0
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10
逢16加1,
在C语言当中表达一个十六进制数的方式,数字前面加0x前缀
8个bit为代表一个字节
sizeof与size_t类型
sizeof是计算数据在内存当中占多大空间的,单位字节
由于sizeof永远返回的是一个大于等于0的整数,所以如果用int来表示sizeof的返回值就不合适,size_t一般就是一个无符号的整数.
一个int型数据占据4个字节的内存大小,在16位操作系统下,int是2个字节,在32和64位操作系统下,int是4个字节。
int a;//代表在内存当中开辟一个4个字节大小的空间
a = 10;//代表4个字节的空间内容是常量10
小端对齐和大端对齐
高地址放高位,底地址放低位---小端对齐
高地址放低位,底地址放高位—大端对齐
对于大型unixCPU都是按照大端对齐方式处理int,
但对于x86构架CPU,还有ARM,是小端对齐的
int a = 0x100;//十六进制
printf(“%d”,a);%d的意思是按照10进制打印一个整数
%x
%X,输出十六进制的时候是用大写的ABCDEF还是小写的abcdef,
%o
在32位系统下:
short = 2个字节
long和int一样,是4字节
long long 是8个字节
在64位操作系统下
int,4个字节
long 在大多数64位系统下8个字节
unsigned int//无符号整数
unsigned long//无符号的长整数
unsigned short//无符号短整数
9l,9L,9ll,9LL,9u,9ull,9ULL
当把一个大的整数赋值给小的整数,叫溢出。
int I = 0x12345678
short a = I;
当一个int赋值给short,会将高位抛弃,
char是字符型,代表一个字节的内存
char在内存当中,有符号最大7f,
无符号,最大ff
unsigned char
char的本质就是一个字节,一个BYTE
%c
\a,警报
\b退格
\n换行
\r回车
\t制表符
\\斜杠
\’单引号
\”双引号
\?问号
char取值范围为-128到127
unsigned char为0-255
float f = 2.5;
double f1 = 3.1415926
%f,%Lf
const限定一个变量的值不可以改变
告诉编译器不要自作聪明的给我优化代码,把我的变量优化的寄存器里面计算,只要是volatile类型变量,每一步都需要从内存当中读取。
register告诉编译器,这个变量只是用寄存器就好,提高效率,所以说register只是一个建议,而不是必须的结果。
字符串是内存中一段连续的char空间,以’\0’结尾
字符串就是0结尾的连续char的内存
printf格式字符
字符 | 对应数据类型 | 含义 |
d | int | 接受整数值并将它表示为有符号的十进制整数 |
hd | Short int | 短整数 |
hu | Unsigned short int | 无符号短整数 |
o | unsigned int | 无符号8进制整数 |
u | unsigned int | 无符号10进制整数 |
x / X | unsigned int | 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF |
f | float或double | 单精度浮点数或双精度浮点数 |
e / E | double | 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写 |
c | char | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
s / S | char * / wchar_t * | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
p | void * | 以16进制形式输出指针 |
% | % | 输出一个百分号 |
printf附加格式
字符 | 含义 |
l | 附加在d,u,x,o前面,表示长整数 |
- | 左对齐 |
m(代表一个整数) | 数据最小宽度 |
0 | 将输出的前面补上0直到占满指定列宽为止不可以搭配使用- |
N(代表一个整数) | 宽度至少为n位不够以空格填充 |
printf是打印一个字符串
putchar是打印一个字符
数据对象:泛指数据在内存的存储区域
左值:表示可以被更改的数据对象
右值:能赋给左值的量
取模,取余数
int a = 10;
a = a + 5;
可以简写成a +=5;
a = a – 5;a -= 5;
a = a * 5;a *= 5;
int I = 6 + 5, 3 + 2
逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值。
优先级 | 运算符 | 结合性 |
1 | ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> | 从左到右 |
2 | ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) | 从右到左 |
3 | *, /, % | 从左到右 |
4 | +,- | 从左到右 |
5 | << >> | 从左到右 |
6 | < > <= >= | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ? | 从右到左 |
14 | =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= | 从右到左 |
15 | ,(逗号运算符) | 从左到右 |
{}代码块
double d = 10.2;
int a =d;//隐式转换
int a1 = 3;
int a2 = 2;
double mid = (double)a1 / (double)a2;//显示的强转
printf("mid = %f\n", mid);
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。