该内容全部代码请看:gitee仓库
第一部分:
板书部分:
1、操作符的分类:
注意:
移位操作符和位操作符
单目操作符中有sizeof
逗号表达式
2、算术操作符:
注意:
除法的使用
取模运算
3、移位操作符:
注意:
移动的是二进制
只可以是整数
4、整数的二进制表示形式:
注意:
原码反码补码
正整数的原码反码补码是相同的
负整数的原码反码补码:
注意:
反码是指原码的符号位不变,其他位按位取反
补码是反码加一
右移的区别:
注意:
采用算术右移就是左边补符号位
采用逻辑右移就是左边补0
代码部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
// int a = 15;
// //00000000000000000000000000001111 - 原码
// //00000000000000000000000000001111 - 反码
// //00000000000000000000000000001111 - 补码
//
// int b = -15;
// //10000000000000000000000000001111 - 原码
// //11111111111111111111111111110000 - 反码(原码的符号位不变,其他位按位取反得到的就是反码)
// //11111111111111111111111111110001 - 补码(反码+1就是补码)
//
// //整数在内存中存储的是补码
// //计算的时候也是使用补码计算的
// return 0;
//}
//移位移动的是补码的二进制序列
//int main()
//{
// int a = 15;
// int b = a >> 1;
// printf("%d\n", b);//7
// printf("%d\n", a);
// return 0;
//}
//int main()
//{
// int a = -15;
// int b = a >> 1;
// printf("%d\n", b);
// printf("%d\n", a);
// return 0;
//}
//
//int main()
//{
// int a = 6;
// //左移操作符 - 左边丢弃,右边补0
// //[00000000000000000000000000000110] - 6的补码
// //[00000000000000000000000000001100] - 补码
// //
// /*int b = a << 1;
// printf("%d\n", b);
// printf("%d\n", a);*/
//
// //a = a << 1;
// //a <<= 1;
// //a = a + 1;
// //a += 1;
//
// return 0;
//}
//int main()
//{
// int a = 5;
// int b = a >> -2;//标准未定义行为
//
// return 0;
//}
第二部分:
板书部分:
1、位操作符:
注意:
按位与和按位或
按位异或
2、按位与:
注意:
两个数对应补码的二进制进行运算
都为1那么才为1
3、使用异或来进行交换两个数字
注意:
只需要三步
4、实现求一个整数存储在内存中的二进制中1的个数
注意:
只需要两步
先&1
再>>1
就是说从最低位开始&1
然后再去>>1
直到判断完每一位
5、单目操作符:
注意:
只有一个操作数
代码部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
// int a = 3;
// //00000000000000000000000000000011 - 补码
// int b = -5;
// //10000000000000000000000000000101
// //11111111111111111111111111111010
// //11111111111111111111111111111011 - 补码
// //
// int c = a & b;
// //& -- 对应二进制位有0则为0,两个同时为1,才是1
// //00000000000000000000000000000011
// //11111111111111111111111111111011
// //00000000000000000000000000000011 - 补码
// //
// printf("%d\n", c);//3
//
// return 0;
//}
//int main()
//{
// int a = 3;
// //00000000000000000000000000000011 - 补码
// int b = -5;
// //10000000000000000000000000000101
// //11111111111111111111111111111010
// //11111111111111111111111111111011 - 补码
// //
// int c = a | b;
// //| - 按(2进制)位或 - 对应的二进制位有1则为1,两个同时为0才是0
// //00000000000000000000000000000011
// //11111111111111111111111111111011
// //11111111111111111111111111111011 - 补码
// //11111111111111111111111111111010
// //10000000000000000000000000000101 - -5
// printf("%d\n", c);//3
//
// return 0;
//}
//int main()
//{
// int a = 3;
// //00000000000000000000000000000011 - 补码
// int b = -5;
// //10000000000000000000000000000101
// //11111111111111111111111111111010
// //11111111111111111111111111111011 - 补码
// //
// int c = a ^ b;
// //^ - 按二进制位异或 -对应的二进制位相同为0,相异为1
// //00000000000000000000000000000011
// //11111111111111111111111111111011
// //11111111111111111111111111111000 - 补码
// //11111111111111111111111111110111
// //10000000000000000000000000001000 - -8
// printf("%d\n", c);//3
//
// return 0;
//}
//& |
//^
//交换2个整型变量
//不能创建临时变量(第三个变量),实现两个整数的交换
//int main()
//{
// int a = 3;
// int b = 5;
// printf("交换前:a=%d b=%d\n", a, b);
// /*int tmp = a;
// a = b;
// b = tmp;*/
//
// /*a = a + b;
// b = a - b;
// a = a - b;*/
//
// a = a ^ b;
// b = a ^ b;
// a = a ^ b;
//
// printf("交换后:a=%d b=%d\n", a, b);
// return 0;
//}
//int main()
//{
// int a = 3;
// int b = 5;
//
// //a^a -> 0
// //a^0 = a
// //异或是支持交换律的
// //a^b^a = 5
// //011
// //101
// //110
// //011
// //101
// //a^a^b = 5
// //
// return 0;
//}
//
//int main()
//{
// int flag = 5;
// if (flag == 0)
// {
// printf("hehe\n");
// }
// if (!flag)//flag 为假 打印hehe
// {
// printf("hehe\n");
// }
// if (flag)
// {
// printf("haha\n");
// }
// return 0;
//}
//int main()
//{
// int a = 5;
// int b = -a;
// printf("%d\n", b);
// return 0;
//}
//& * 应用于指针
//int main()
//{
// int a = 10;
// //pa是指针变量
// int* pa = &a;//&-取地址操作符-取出a的地址
//
// *pa = 20;//解引用操作符(间接访问操作符)-单目操作符-通用pa中存放的地址,找到指向的空间(内容)
// int c = *pa;
//
// return 0;
//}
第三部分:
板书部分:
1、sizeof和数组:
注意:
sizeof不是函数而是操作符
sizeof计算的是类型创建变量的大小 单位是字节
指针在32位4和64位8是不一样的
2、关系操作符:
3、逻辑操作符:
注意:
逻辑操作符具有短路现象
代码部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
// int a = 10;
// printf("%d\n", sizeof(int));
// printf("%d\n", sizeof(a));
// printf("%d\n", sizeof a);//说明sizeof不是函数
//
// return 0;
//}
//int main()
//{
// int arr[10] = {0};
// printf("%d\n", sizeof(arr));//40 - 计算整个数组的大小,单位字节
// printf("%d\n", sizeof(int [10]));//
// return 0;
//}
//
//~ 按补码二进制位取反
//
//int main()
//{
// int a = 0;
// printf("%d\n", ~a);//?
// //00000000000000000000000000000000
// //11111111111111111111111111111111 - 补码
// //11111111111111111111111111111110
// //10000000000000000000000000000001 -1
// return 0;
//}
//
//
//int main()
//{
// int a = 13;
// //00000000000000000000000000001101
// //00000000000000000000000000010000
// a |= (1<<4);
// printf("%d\n", a);
// //00000000000000000000000000011101
// //11111111111111111111111111101111
// //00000000000000000000000000001101
//
// a &= (~(1 << 4));
// printf("%d\n", a);
//
// return 0;
//}
//
//int main()
//{
// int a = 0;
// while (scanf("%d", &a) == 1)
// {
// printf("%d\n", a);
// }
// return 0;
//}
//int main()
//{
// int a = 0;
// //scanf 读取失败返回的是EOF
// while (scanf("%d", &a) != EOF)
// {
// printf("%d\n", a);
// }
// return 0;
//}
//
//int main()
//{
// int a = 0;
// //scanf 读取失败返回的是EOF
// //假设scanf 读取失败,返回EOF ---> -1
// while (~scanf("%d", &a))
// {
// printf("%d\n", a);
// }
// return 0;
//}
//--前置、后置--
//++前置、后置++
//int main()
//{
// int a = 1;
// int b = a++;//后置++,先使用,后++
// //b=a,a=a+1
// printf("a=%d b=%d\n", a, b);//2 1
// return 0;
//}
//
//int main()
//{
// int a = 1;
// int b = a--;//后置--,先使用,后--
// //b=a,a=a-1
// printf("a=%d b=%d\n", a, b);//0 1
// return 0;
//}
//
//int main()
//{
// int a = 1;
// int b = ++a;//前置++,先++,后使用
// //a=a+1,b=a
// printf("a=%d b=%d\n", a, b);//2 2
// return 0;
//}
//int main()
//{
// int a = 1;
// int b = --a;//前置--,先--,后使用
// //a=a-1,b=a
// printf("a=%d b=%d\n", a, b);//0 0
// return 0;
//}
//int main()
//{
// int a = 10;
// printf("%d\n", a++);//
// printf("%d\n", a);//
//
// return 0;
//}
//
//int main()
//{
// int a = (int)3.14;//强制
// printf("%d\n", a);
// // int a = int(3.14)//err
// return 0;
//}
//
//#include <stdio.h>
//void test1(int arr[])//int*
//{
// printf("%d\n", sizeof(arr));//(2)
//}
//void test2(char ch[])//char*
//{
// printf("%d\n", sizeof(ch));//(4)
//}
//int main()
//{
// int arr[10] = { 0 };
// char ch[10] = { 0 };
// printf("%d\n", sizeof(arr));//(1)
// printf("%d\n", sizeof(ch));//(3)
// test1(arr);//&arr[0]
// test2(ch);// &ch[0]
// return 0;
//}
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a, &b);
// //a 和 b 都是5,打印 hehe
// if (a == 5 && b == 5)
// {
// printf("hehe\n");
// }
// //a 或者 b是5 打印哈哈
// if (a == 5 || b == 5)
// {
// printf("haha\n");
// }
// return 0;
//}
//int main()
//{
// int y = 0;
// scanf("%d", &y);
// //1. 能被4整除,并且不能被100整除
// //2. 能被400整除是闰年
// if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
// {
// printf("闰年\n");
// }
// else
// {
// printf("不是闰年\n");
// }
// return 0;
//}
//
//#include <stdio.h>
//int main()
//{
// int i = 0, a = 0, b = 2, c = 3, d = 4;
// //i = a++ && ++b && d++;
//
// i = a++||++b||d++;
//
// printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//
// return 0;
//}
//
//逻辑操作符
//&& || ! - 计算结果是真,使用1表示
//int main()
//{
// int a = 3 && 5;
// printf("%d\n", a);
//
// return 0;
//}