
C语言学习记录日期 9.18~9.20今日知识点 ——算术操作符 - */%练习代码今日知识点 ——移位操作符左移操作符右移操作符练习代码//移位操作符//左移操作符左边丢弃右边补0//int main()//{// int a 2;// int b a 1;//a向左移一位,把a的二进制位向左移动一位.a—00000000000000000000000000000010,b—000000000000000000000000000001002^24// printf(“b %d\n”,b);//4// return 0;//}//右移操作符正数右移算术右移和逻辑右移结果一样//算术右移:右边丢弃左边补原最左边原来的符号位是0 or 1符号位//逻辑右移右边丢弃左边补0//int main()//{// int a 10;// int b a 1;//a向右移一位,把a的二进制位向右移动一位.a—00000000000000000000000000001010,b—00000000000000000000000000000101415// printf(“b %d\n”,b);//5// printf(“a %d\n”,a);//10,a不变// return 0;//}//负数右移//存放在内存中存放的是二进制的 补 码//整数的二进制表示形式有三种//原码直接根据数值写出的二进制序列就是原码//反码原码的符号位不变其他位按按位取反就是反码//补码反码1就是补码//例如-1的原码10000000000000000000000000000001//反码11111111111111111111111111111110//补码11111111111111111111111111111111//int main()//{// int a -1;// int b a 1;//a向右移一位,把a的二进制位向右移动一位.a—11111111111111111111111111111111,b—11111111111111111111111111111111// printf(“b %d\n”,b);//-1当前的右移操作符使用的是算术右移// return 0;//}今日知识点 ——位操作符——按位与口诀全 1 才 1有 0 则 0。|——按位或口诀有 1 就 1全 0 才 0。^——按位异或相同为 0相异为 1注他们操作数必须是整数练习代码//aa0101010000,相同为0//a0010000010aint main(){int a 3; int b 5; //交换 a a ^ b; b a ^ b;//其实等价于ba^b^ba^0a a a ^ b;//其实等价于aa^a^b0^bb printf(a %d b %d\n,a ,b); return 0;}今日知识点 ——复合赋值操作符-*/%|^练习代码//注 — 赋值// — 判断//赋值操作符和复合赋值操作符int mian(){int a 100; a 100; //12,效果一样 a a 100;//1 a 100;//2 a a 3; a 3; return 0;}今日知识点 —— 单目操作符 逻辑反操作负值正值 取地址sizeof 操作数的类型长度以字节为单位对一个数的二进制按位取反– 前置、后置– 前置、后置间接访问操作符解引用操作符(类型) 强制类型转换练习代码今日知识点 ——关系操作符! 用于测试“不相等” 用于测试“相等”注用于赋值用于判断练习代码//关系操作符//int main()//{// int a 3;// int b 5;// //if (a b)// //if (a ! b)// //if (a b)// //if (a b)// //if (a b)// if (a b)// {// printf(“hehe\n”);// }// return 0;//}//用于赋值判断相等//比较两个字符串相等不能使用 //字符串的“值”是什么//在 C 语言中字符串本质是字符数组。//当你写下数组名 s1 时在大多数表达式里它代表的是数组首元素的地址指针。//char s1[] “hello”;//char s2[] “hello”;//s1 的值是一个内存地址比如 0x1000。//s2 的值是另一个内存地址比如 0x2000今日知识点 ——逻辑操作符 逻辑与font stylecolor:rgb(249, 250, 251);background-color:rgb(44, 44, 46);/font逻辑与两边都为“真”时结果才是 1真。|| 逻辑或font stylecolor:rgb(249, 250, 251);background-color:rgb(44, 44, 46);||/fontfont stylecolor:rgb(249, 250, 251);background-color:rgb(21, 21, 23);逻辑或只要有一个为“真”结果就是 1真/font区分逻辑与和按位与 区分逻辑或和按位或12 ------ 01 和 1 才为 112 ------ 1 两边为真才是真1|2 ------ 3有 1 就为 11||2 ----- 1一边为真就为真练习代码今日知识点 ——三目操作符exp1 exp2 exp3练习代码//三目操作符int main(){int a 3; int b 0; if (a 5) b 1; else b -1; //三目操作符 //b (a 5 ? 1 : -1);//等价上面的if,else语句 return 0;}今日知识点 ——下标引用操作符 [][]、.、-练习代码//下标操作符//int main()//{// int arr[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// printf(“%d\n”,arr[4]);//5[]就是下标引用操作符// //[]的操作数是两个arr4缺一不可// //35的两个操作数是3和5// return 0;//}//函数的定义//int Add(int x, int y)//{// return x y;//}//void test()//{//}//int main()//{// int a 10;// int b 20;// //函数调用// int ret Add(a, b);//() ---- 函数调用操作符操作数有三个Add(),参数a参数b// printf(“%d\n”,ret);// test();// return 0;//}//结构成员访问操作符//.,结构体变量名.成员名//-//结构体//int float char short//double long////书书名书号出版社作者定价//人:名字年龄性别//创建一个自定义类型struct Book{//结构体的成员变量 char name[20]; char id[20]; int price;};//;不可或缺int main(){// int num 10;struct Book b {C语言,C20260919,55}; struct Book * pb b; //结构体指针-成员名 printf(书名%s\n,pb-name);//-操作符可以找结构体成员变量 printf(书号%s\n,pb-id); printf(定价%d\n,pb-price);// printf(“书名%s\n”,(*pb).name);//.操作符可以找结构体成员变量// printf(“书号%s\n”,(*pb).id);// printf(“定价%d\n”,(*pb).price);// printf(“书名%s\n”,b.name);//.操作符可以找结构体成员变量// printf(“书号%s\n”,b.id);// printf(“定价%d\n”,b.price);return 0;}今日知识点 ——隐式类型转换C 的整型算术运算总是至少以缺省整型类型的精度来进行计算为了获得这个精度表达式中的字符和短整型操作数在使用之前被转换为普通整型这种转换称为整型提升练习代码##今日知识点 ——操作符的属性复杂表达式的求值有三个影响的因素操作符的优先级操作符的结合性是否控制求值顺序练习代码今日知识点 ——数组习题练习代码//遍历数组为0 函数void init(int arr[], int sz){int i 0; for (i 0;i sz;i) { arr[i] 0; }}//一一打印数组 函数void print(int arr[],int sz){int i 0; for (i 0;i sz;i) { printf(%d ,arr[i]); } printf(\n);}//将数组逆序,交换位置void reverse(int arr[], int sz){int left 0; int right sz - 1;//下标从0开始 while (left right) { int tem arr[left]; arr[left] arr[right]; arr[right] tem; left; right--; }}int main(){int arr[10] {1,2,3,4,5,6,7,8,9,10}; int sz sizeof(arr) / sizeof(arr[0]);//求数组长度 print(arr,sz);//1 reverse(arr,sz); print(arr,sz);//2 init(arr,sz); print(arr,sz);//3 return 0;}今日知识点 ——练习代码