c语言运算符与表达式知识点总结,C语言运算符与表达式
二。数据类型、运算符和表达式1。数据类型
1)不同数据类型的字节数
1.1)同一数据类型在不同平台下内存大小不同;1.2)占用内存:short=int=longint ~=floatdouble=2 * float2)存储差异
2.1)十进制系统:
二进制(B11111110)、八进制(0376)、十进制(254)、十六进制(0x Fe);(254)10=(11111110)2;(011 111 110)2=(376)8;(1111 1110)2=(FE)16;温馨提示:8421法;二进制到八进制三位数组,二进制到十六进制四位数组;c语言不识别二进制,不能给变量赋二进制值;
2.2)存储形式:
已签名/未签名;以补码的形式存储;正数的补码是它的二进制本身,负数的补码是它的绝对值的二进制形式,是反加一;类型:以float为例:符号位(31)指数部分(23-30)精度部分(0-22);如0.314 * 10 ^ 1;Type:对于char类型是否有符号,标准c没有定义;ASCII表:0代表字符NULL,48代表字符0,65代表字符A,A,97代表字符A;3)不同数据类型之间的转换
实数到整数类型不会四舍五入,但小数部分会直接丢弃;隐式转换:在不同数据类型之间进行运算,默认情况下接近内存占用大的类型;显式转换:强制类型转换4)特殊性
4.1)布尔bool:默认false值为0,否则为真;
# include stdio . h # include STD bool . h int main(void){ bool a=true;bool b=falseprintf(a=%d,b=%d\n ,a,b);//a=1,b=0返回0;}4.2)浮点数无法准确表示,无法判断是否等于另一个数;
# include stdio . h # include math . h int is positive(float f){ if(f 0)return 1;//Else if(f==0)Else if(fabs(f-0)1e-6)//解返回0;否则返回-1;}int main(void){ printf(%d,%d,%d\n ,IsPositive(-3.14),IsPositive(0),is positive(100));返回0;} 4.3)char类型是否有符号:标准C的Char类型可以是有符号的,也可以是无符号的,这是由具体的编译器、处理器或者两者决定的;
4.4)零值的不同形式:0 0 0 \0 NULL
4.5)数据类型要与后续代码使用的输入输出相匹配,防止自相矛盾;
2.变量和常数1)常数
1.1)定义:在程序执行过程中其值不会改变的量,如:3.14,数组名,不会出现在赋值符号的左侧;
1.2)分类:
整数常量:1,790,76,52实数常量:3.14,1.99999字符常量:由单引号引起的单个或转义字符,如 a , \n , \015 , \ x7f ;字符串常量:由双引号引起的一个或多个字符的序列,如以 \0 结尾的a,abc \ n \ 021 \ 018
“ddd”代表1~3位八进制数ddd对应的字符,如“\141”代表字符常量“A”
\xhh 代表1~2位十六进制数hh对应的字符,如 \x41 代表字符常量 a
# include stdio . h # include string . h int main(void){ printf( % llu \ n ,strlen( ABC \ n \ 021 \ 017 );//结果是6,\017是1个字符printf (%llu \ n ,strlen( ABC \ n \ 021 \ 018 );//结果是7,\018是2个字符printf (%llu \ n ,strlen( c:\ test \ 32 \ test . c );//结果是13,\32是1个字符printf (%llu \ n ,strlen( c:\ test \ 382 \ test . c );//结果是15,\382是3个字符printf (%llu \ n ,strlen( c:\ test \ x61 \ test . c );//结果是13,\x61是1个字符返回0;}恒等式常数:由#define定义的常数;在加工程序的预处理阶段,占用的是运行时间,而不是编译时间;特点是全部改,缺点是不检查语法,只是简单的用宏名替换宏体。# include stdio . h # define PI 3.14 int main(void){ PI 3PI-4PI * 10PI/12 return 0;}/
gcc -E 4.c
.
int main(void)
{
3.14 3
3.14 - 4
3.14 10
3.14/12
返回0;
}
*/
#包含stdio.h
#定义PI 3.14
#定义加法(2 ^ 3)
#定义MAX(a,b) ((a) (b)?(a):(b))
#定义MAX_P(a,b) ({typeof(a) x=(a),y=(b);(x) (y)?(x):(y);})
int max(int a,int b)
{
回个b?甲:乙;
}
int main(void)
{
int r=1,a=5,b=3;
printf( area=%.2lf\n,PI r r);//area=3.14
printf( %d\n,ADD * ADD);//25
printf( MAX=%d\n,MAX(a,b));//MAX=5
/*使用macro */printf时出现异常( a=%d,b=%d\n ,a,b);//a=5,b=3//printf(%d\n ,((a ) (b)?(a):(b)));printf(%d\n ,MAX(a,b));//6printf(a=%d,b=%d\n ,a,b);//a=7,b=4/*用函数求解*/printf(a=%d,b=%d\n ,a,b);//a=7,b=4printf(%d\n ,max(a,b));//7printf(a=%d,b=%d\n ,a,b);//a=8,b=5/*用宏求解*/printf(a=%d,b=%d\n ,a,b);//a=8,b=5//printf(%d\n ,({typeof(a ) x=(a),y=(b);(x) (y)?(x):(y);}));printf(%d\n ,MAX_P(a,b));//8printf(a=%d,b=%d\n ,a,b);//a=9,b=6返回0;}
**2)变量** 2.1)定义:用来容纳某些特定内容的量,在程序执行过程中数值会随时变化;2.2)定义变量:[存储类型]数据类型标识符=值;2.3)标识符:由字母、数字和下划线组成的表示序列,不能以数字开头;努力知道自己想要什么;2.4)数据类型:基础数据类型构造类型;2.5)值:注意值与数据类型匹配;2.6)存储类型:自动静态寄存器extern(描述型);-auto:默认类型,自动空间分配,自动空间回收;-register:寄存器类型,建议(建议编译器);只能定义局部变量,不能定义全局变量;有大小限制,只能定义32位数据类型(针对32位操作系统),比如double。没有寄存器地址,所以寄存器类型的变量不能打印出地址供查看或使用;-static:静态类型,自动初始化为零或null,其变量的值被继承;修改全局变量以防止与其他源文件中同名的全局变量冲突;在装饰一个功能的时候,强调功能不要向外延伸;#包含stdio.h
无效函数
{
int x=0;
静态int y;
x;
y;
printf( x=%d,x=%p,y=%d,y=%p\n,x,x,y,
}
int main(void)
{
auto int I;
int j;
静态int s;
printf( i=%d\n,I);//i=随机值
printf( j=%d\n,j);//j=随机值
printf( s=%d\n,s);//s=0
func();//x=1,x=随机值,y=1,y=随机值
func();//x=1,x=不同的随机值,y=2,y=相同的随机值
func();//x=1,x=不同的随机值,y=3,y=相同的随机值
返回0;
}
` ` c//。/minproj/proj . H # IFN def PROJ_H__ #定义PROJ _ H _ _静态void func(void);//static修改函数,防止其扩展void call _ func(void);#endif//。/minproj/proj . c # include stdio . h # include proj . h static int I=20;静态void func(void){ printf([% s]I=% d \ n ,__FUNCTION__,I);} void call _ func(void){ func();}//./minproj/main . c # include stdio . h # include proj . h static int I=10;//static修改全局变量int main(void){ printf([% s]I=% d \ n ,_ _ function _ _,I);//[main]I=10//func();//未定义对“func”call _ func()的引用;//[func] i=20返回0;}extern:不属于定义类型,属于描述类型关键字,表示被解释变量的值或类型不能改变;//./miniproj _ extern/proj . H # IFN def PROJ _ H _ _ #定义PROJ _ H _ _ void func(void);#endif//。/miniproj_extern/proj.c
#包含stdio.h
#包含项目h
//extern int I=100;//警告:“I”已初始化并声明为“extern”
外部整数I;
//extern float I;//随机值
无效函数
{
printf( [%s] i=%d\n,FUNCTION,I);
}
//./miniproj_extern/main.c
#包含stdio.h
#包含项目h
int i=10
int main(void)
{
printf( [%s] i=%d\n,FUNCTION,I);//[main] i=10
func();//[func] i=10
返回0;
}
![4.可变存储type.jpg】(https://s 2.51 CTO . com/images/202210/4828 f 7 b 86 CB 34 b5 cb2 a 249981 ce 8119 C4 a12 d 6 . jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type _ zmfuz 3 poz w5 nagvpdgk=/resize,m_fixed,W_750) 2.7)变量的生命周期和作用域全局变量和局部变量``` ` c #包含stdio.h int i=100//全局变量void func(int i) //调用函数时我赋的参数是值传递{printf (I=% d,I=% p \ n ,I,} int main(void){ int I=5;//局部变量{ int I=2;//局部变量printf (I=% d,I=% p \ n ,I,//I=2,I=00000000061 Fe 18 func(I);//i=2,I=00000000061 fdf 0 } func(I);//i=5,i=000000000061FDF0返回0;}3、运算符和表达式1)表达式和语句的区别:表达式(i=1),语句(I=1;)
2)操作员:
2.1)每个运算符需要参与运算的操作数的数量。
一元运算符:
算术运算符:表示正数;-表示负数;表示自我增加;-表示自还原;逻辑运算符:逻辑否定;字节数:sizeof类型转换:(类型);下标运算符:[];指针操作符:*解引用;获取地址;按位运算符:~按位求逆;
双目操作员:
算术运算符:加法;-减法;*乘法;/除法;%盈余;关系运算符:=小于或等于;==等于;=大于或等于;=不等于;逻辑运算符:逻辑AND逻辑或;赋值运算符:=赋值;=-=*=/=%===^=~===;# include stdio . h int main(void){ int a=2;a-=a *=a=3;//组合运算printf(a=%d\n ,a)从右向左;//a=0返回0;}逗号运算符:exp1,exp2逗号运算符确保操作数按顺序处理。首先计算左操作数,然后计算右操作数。右操作数的类型和值作为整个表达式的结果。组件运算符:-按位运算符:按位或;根据位和;按位异或;三元运算符:
条件运算符:exp1?exp2:exp3;2.2)组合
优先顺序
2.4)运算符的特殊用法
/除法运算的被除数不能为零;% remainder要求两个操作数必须是整数;自增自减运算规则:先算符,后用变量值;在变量面前,先用变量值,再计算;# include stdio . h int main(void){ int I=1,j=10,v;v=I j;printf(i=%d\n ,I);//i=2printf(j=%d\n ,j);//j=11printf(v=%d\n ,v);//v=12v=-I j;printf(i=%d\n ,I);//i=1printf(j=%d\n ,j);//j=12printf(v=%d\n ,v);//v=12返回0;}=赋值运算符,==关系运算符相等;逻辑运算符(,)的短路性质;# include stdio . h int main(void){ int a=15,b=20,c=100,d=200int m=1,n=1;int j=1,k=1;(m=a b) (n=c printf(m=%d,n=%d\n ,m,n);//m=0,n=1 (j=a b) (k=c printf(j=%d,k=%d\n ,j,k);//j=0,k=0返回0;}2.5)位操作的意义
将操作数中的第n位设置为1,其他位保持不变:num=num 1n;将操作数中第n位设置为0,其他位保持不变:num=num ~(1n);测试位n:if(num1n)# includes stdio . h int main(void){ int a=16;//b 10000 a=a 1 2;//设置第二位为1,其他位不变printf(%d\n ,a);//20b 10100 a=a ~(1 ^ 2);//设置第二位为0,其他位不变printf(%d\n ,a);//16printf(%d,%d\n ,a 1 4,a 1 3);//16,0返回0;}转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。