#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//***作业讲解
//(3,4)逗号表达式
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%d", sizeof(arr));//16
return 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;
int tmp = 0;
while (left < right)
{
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
//init(arr, sz);
print(arr, sz);
reverse(arr, sz);
return 0;
}
//***数组交换
int mian()
{
int arr1[] = { 1,3,4,7,9 };
int arr2[] = { 2,4,6,8,10 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
int tmp = 0;
int i = 0;
for (i = 0; i < sz; i++)
{
tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
return 0;
}
***操作符详解
(板书)
int main()
{
***算数操作符
10.0 % 3错误必须整数
//int ret = 10 % 3;//取模(取余)
//int ret1 = 10 / 3;//商
//double ret2 = 10 / 3.0;
//printf("%d\n", ret);//1
//printf("%d\n", ret1);//3
//printf("%lf\n", ret2);//3.333333
***移位操作符
//int a = 5;
//int a1 = -5;
//int b = a << 2;//a的二进制位移动两位
//int b1 = a1 << 2;//补码移动两位
//printf("%d\n", b);//20
//printf("%d\n", b1);//-20
return 0;
}
//右移
//算术右移(左边补原来的符号位)or逻辑右移(左边补0)
int main()
{
int a = 5;
int a1 = -5;
int b = a >> 1;
int b1= a1 >> 1;
printf("%d\n", b);//2
printf("%d\n", b1);//-3(算术右移)
return 0;
}
//***位操作符
//&按位与
//|按位或
//^按位异或
int main()
{
int a = 3;//0011
int b = -5;//1...1011
int c = a & b;//补码计算
printf("%d\n", c);//3
return 0;
}
int main()
{
int a = 3;//0011
int b = -5;//1...1011
int c = a | b;//补码计算
printf("%d\n", c);//1...1011, -5
return 0;
}
int main()
{
int a = 3;//0011
int b = -5;//1...1011
int c = a ^ b;//补码计算
printf("%d\n", c);//1...1000->1...0111->1000...1000,-8
return 0;
}
***交换变量
方法一
int main()
{
int a = 3;
int b = 5;
int c = 0;//临时变量
printf("%d %d\n", a, b);
c = a;
a = b;
b = c;
printf("%d %d\n", a, b);
return 0;
}
方法二
int main()
{
int a = 3;
int b = 5;
printf("%d %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("%d %d\n", a, b);
return 0;
}
方法三
异或
int main()
{
int a = 3;
int b = 5;
printf("%d %d\n", a, b);
a = a ^ b;
b = a ^ b; //a^b^b
a = a ^ b;//a^a^b
printf("%d %d\n", a, b);
return 0;
}
***左值,是可以放在等号左边的,一般是一块空间
右值,是可以放在等号右边的,一般是一个值,或一个空间的内容
//*** ~ 对一个二进制数按位取反
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
int main()
{
int a = 10;
a |= (1 << 2);
printf("%d\n", a);
//1010
//或0100
//得1110
return 0;
}