文章目录
- C语言--备忘
- 一、编程规范
- 二、数据 *** 作
- 1. 数据类型
- 2. 占位符
- 3. 运算符
- 3.1 基本运算符 加'+' 减'-' 乘'*' 除'/' 余'%'
- 3.2 赋值运算符 '='
- 3.3 自增自减运算符 '++' '--'
- 3.4 关系运算符 '==' '>=' '<=' '!='
- 3.5 逻辑运算符:与'&&',或'||',非 '!'
- 3.5 位运算符:与'&',或'|',非 '^',取反'~'
- 3.6 移位运算符:'<<' '>>'
- 3.7 地址运算符:取地址'&',解地址'*'
- 3.8 三目运算符:取地址 '?'
- 3.8 运算符优先级
- 3. 类型转换
- 3.1 隐式转换
- 3.2 强制转换
- 4. 编译过程
- 总结
一、编程规范
- 源文件:以.c结尾,头文件:必须以.h结尾
- 头文件使用要点:
#include <头文件.h>:告诉gcc,头文件位于/user/inlude 下面;
#include “头文件.h”:告诉gcc,当前目录下找到头文件,若没有,再去/usr/include目录; - main 函数前必须int,后面括号内可以写void, 也可以写 argc ,argv;
- main中的return让main函数执行到这停止运行。返回0,告诉运行正常。若有问题,非0;
- 熟练使用TAB按键;
- unsiged int 和 unsigned long 对于GCC编译器不一样;若是x64位,long是8字节,int依然是4字节;
- 字符变量存储数据本质为ASCII编码,char=‘A’,实际’A’为整数,本质分配1字节空间,分配ASCII码
关键字名称 | 含义 | 内存大小 | 数字范围 |
---|---|---|---|
char | 字符类型 | 1Byte | -128~127 |
unsigned char | 非负的单字节整数 | 1Byte | 0~255 |
short | 双字节整数 | 2Byte | -2^15 ~ 2^15-1 |
unsigned short | 双字节整数 | 2Byte | 0 ~ 2^16-1 |
int | 四字节整数 | 4Byte | -2^31 ~ 2^31 -1 |
unsigned int | 四字节整数 | 4Byte | 0~2^32 -1 |
long | 四字节整数 | 4Byte | 2^31 ~ 2^31 -1 |
unsigned long | 四字节整数 | 4Byte | 0~2^32 -1 |
longlong | 八字节整数 | 8Byte | -2^63 ~ 2^63-1 |
float | 单精度浮点数 | 4Byte | 略 |
double | 双精度浮点数 | 8Byte | 略 |
数据类型 | 占位 |
---|---|
char | %c,%hhd [half half %d,十进制] |
char | %c,%hhd [half half %d,十进制] |
insigned char | %c,%hhd [half half %d,十进制] |
short | %hd |
unsigned short | %hu |
int | %d [4Byte] |
unsigned int | %u [4个字节] |
long | %ld |
unsigned long | %lu |
float | %f或者%g //前者保留多余的0,后者不保留,6位 |
double | %lf或者%lg |
- A/B : 若AB均为整数,计算结果保留整数;
- A%B 和 A/B : B不能为 0 ,否则程序崩溃;
- 5%1.1 : 取余 *** 作,分母不能为浮点数,否则崩溃;
- A%B :结果的符号 与 A 保持一致;
- A = B : A不能为常量或者表达式;
类型 | 说明 |
---|---|
前++ | 针对变量的值+1,后计算表达式的值; |
后++ | 先计算表达式的值,后对变量的值+1; |
前- - | 先对变量的值减1,后计算表达式的值 |
后- - | 先计算表达式的值,后对变量的值-1; |
int a=1;
int b=0;
b=++a;//a先自加1为2,然后再赋值给b:a=2,b=2
b=a++;//b=2,a=3,解释:先执行赋值,a再自加1
printf("a=%d,b=%d\n",a,b) ;//a=2,b=3
3.4 关系运算符 ‘==’ ‘>=’ ‘<=’ ‘!=’
- 关系运算符的运算结果是整数:1(真),0(假)
- C=表达式A&&表达式B,当且仅当A和B同时为真时,整个表达式才为真
- C=表达式A||表达式B,当A和B中有一个为真时,整个表达式才为真
- !表达式A,若A为真,表达式为假
切记:短路运算
A&&B,若A的值为假,则B不运算[0&&++b],++b 此条语句不会执行,b=1 ;
A||B,若A为真,则B不运算[250||++b], ++b此条语句不会执行,b=1 ;
int a=1;
0||++a;
printf("a=%d\n",a);//a=2,必须路过后者;
int b=1;
250||++b;
printf("b=%d\n",b);//b=1,自动忽略后者运算
3.5 位运算符:与’&‘,或’|‘,非 ‘^’,取反’~’
概念:位运算符,对内存中的二进制进行运算,C语言提供专门的运算符,简称位运算符
-
位与:C=A&B, 任何位与0做与运算,结果为0,任何数跟1做位与,保持原值
一般用于将某个Bit位清0,并保持其他位置不变 -
位或:C=A|B, 任何位与1做或运算,结果为1,任何位置与0做运算,保持原值
一般用于将某个bit位置至0,并保持其他位置不变 -
位异或:C=A^B:相同为0,不同为1
语法:一般用于取反运算: -
位反:C=~A( 默认int 类型,32位,4字节 )
取反(~)运算符一般与位与(&)结合起来实现某个bit的清0 *** 作;
-
左移动:A< 左移n位相当于乘以2的n次方
-
右移动:A>>B :将A右移动B个位置
右移相当于除以2次方
#include
int mian(void)
{
int a= 0x5A;
//将a变量的第3位置清0;
a &= ~(1<<3);
printf("a=%#x\n",a);
//将a变量的4位置置1;
a |= (1<<4);
//将变量的2、3位置置1;
a |=(3<<2);
printf("a=%#\n",a);
return 0;
}
3.7 地址运算符:取地址’&‘,解地址’*’
- 计算机中地址由32位2进制数组成;
取地址运算符 &:获取一个变量在内存对应的首地址;占位符%p用来显示地址信息;
语法:&变量名 - 解运算符 * :根据变量的首地址获取内存中的数据或者根据首地址写入数据;
用法:*地址,结果可以 *** 作内存;
int a= 250;
printf("a的首地址%p\n",&a);
printf("a的值为%d\n",*&a);
*&a=520;//根据a的地址找到a的内存,然后往内存写入520
3.8 三目运算符:取地址 ‘?’
- 整个表达式结果D=条件表达式A ?表达式B:表达式C;
如果A为真,则D=B,否则D=C
#include //ABS绝对值程序
int main(void)
{
int a=0;
printf("请输入一个数:");
scanf("%d,&a");
a= a>=0 ? a:0-a;//实现绝对值 *** 作
printf("a的绝对值为%d\n",a); // a = 0
return 0;
}
3.8 运算符优先级
优先级:
1. 括号类最快;
2. 数学运算:加减乘除;
3. 数学运算:移位;
4. 真假判断:大于小于等于
5. 位 *** 作运算
6. 逻辑判断:与或非
概念:如果表达式中不同数字的数据类型不同,gcc编译器将不同数据类型转换成相同的数据类型后在计算
- 隐式转换过程中,自动将内存小的类型转换成占内存大的内省;
- 隐式转换过程中,既有整型数据类型,还有浮点数数类型,gcc自动将整型数据类型转换成浮点类型;
- 隐式转换过程中,既有无符号数据类型,还有有符号数据类型 ,gcc自动将有符号转换成无符号数据类型;
#include
int main(void)
{
//数据类型有int和double,先转换为double,8字节
printf("sizeof(1?1:0.9)的结果是%d\n",sizeof(1?1:0.9));
//结果为0,-7和3都为int 类型;
printf("-7+3>0结果是%d\n",-7+3>0);
//结果为1,-7先转换为无符号;
printf("-7+3u>0结果是%d\n",-7+3u>0);
return 0;
}
3.2 强制转换
建议使用,提高代码的可读性:目标类型变量=(目标类型)源类型变量
char a= 90; int b=(int)a;// GCC强制将a转换成int 类型赋值给b
// 注意:强制转换可能造成数据的丢失:
char a=(char)300;//数据丢失了;
printf("a=%d\n",a); //a=44=300-128=172-128=44
- 注意:强制转换都是小转大,或者相等转
- 切记:不管那种类型转换,都不会修改变量本身的值
// 在ubuntu 环境 使用GCC 编译工具
// 一步法:
gcc -o type type.c
// 三步法:
//--1. 链接
gcc -E type.c type.i
//--2. 编译
gcc -c -o type.o type.i
//--3. 生成
gcc -o type type.o
总结
提示:这里对文章进行总结:
- 章节包含内容:数据类型,运算符,类型转换;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)