学习C++第四天

时间:2023-02-10 23:00:07

操作符
算数操作符:+ - * / %
移位操作符:>> <<
位操作符:&--按位与 ^--按位异或 |--按位或
赋值操作符:= += -= *= /= &= ^= |= >>= <<=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反

学习C++第四天

整数a
0
二进制:00000000000000000000000000000000
~a:11111111111111111111111111111111

~按(二进制)位取法,把所有二进制位的0变成1,1变成0
整数在内存中存储的是补码
一个整数的二进制表示有三种:
原码
原码符号位不变,其他位按位取反得到反码
反码
反码+1得到补码
补码
负数的计算:
-1
原码:10000000000000000000000000000001
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111

正整数的原码,补码,反码相同



-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”

逻辑操作符
&& 逻辑与
|| 逻辑或

条件操作符
exp1 ? exp2 : exp3
exp1成立,exp2计算,整个表达式的结构是:exp2的结果
exp1不成立,exp3计算,整个表达式的结构是:exp3的结果

逗号表达式
exp1, exp2, exp3, …expN

下标引用、函数调用和结构成员
[] () . ->

关键字
关键字为c语言提供的,不能自己创建关键字
关键字不能做变量名
变量名不能是关键字
常见的关键字:auto break case char const continue default do double else enum extern float for goto if int long register return short signedsizeof static struct switch typedef union unsigned void volatile
关键字 typedef---类型重定义学习C++第四天


关键字static:修饰局部变量的生命周期,本质上 是改变了变量的储存类型


1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数

修饰局部变量
修饰全局变量
全局变量,在其他源文件内可以被使用,是因为全局变量具有外部链接属性
但是被static修饰后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了!!
static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用其他源文件不能使用!
本质上:static是将函数的外部链接属性变成了内部链接属性!(和static修饰全局变量一样!)

学习C++第四天

学习C++第四天

学习C++第四天

. #define 定义常量和宏

练习代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//int main()
//{
// //int a = 9 / 2;
// //float a = 9 / 2.0;
// int a = 9 % 2;//%-取模(余数)
// printf("%d\n", a);
//
// return 0;
//}

//int main()
//{
// int a = 2;
// int b = a << 1;//左移操作符---移动的是二进制位
//
// printf("%d\n", b);
//
// return 0;
//}

//int main()
//{
// int a = 10;
// //0表示假,非0就是真
// printf("%d\n", !a);
//
// return 0;
//}

//int main()
//{
// int arr[10] = { 0 };
// printf("%d\n", sizeof(arr));//计算的是数组的总大小,单位是字节
// printf("%d\n", sizeof(arr[0]));
// int sz = sizeof(arr) / sizeof(arr[0]);
// printf("%d\n", sz);
// return 0;
//}

//int main()
//{
// int a = 0;
//
// printf("%d\n", ~a);
// return 0;
//}

//int main()
//{
// //int a = 10;
// //int b = a++;//后置++表示先使用再++,所以优先给b赋值为a=10,再把a+1
//
// int a = 10;
// int b = ++a;//前置++表示先++后使用,++a的结果会把上一步的int a=10覆盖
//
// printf("%d\n", a);
// printf("%d\n", b);
//
// return 0;
//}

//int main()
//{
// int a = (int)3.14;//强制类型转换
//
// printf("%d\n", a);
// return 0;
//
//}

//typedef unsigned int u_int;//用typedef重新定义关键字
//int main()
//{
// unsigned int num = 100;
// u_int num2 = 100;//和上一步为同一类型
//
// return 0;
//}

//void test()
//{
// int a = 1;
// a++;
// printf("%d\n", a);
//}
//int main()
//{
// int i = 0;
// while (i < 10)
// {
// test();
// i++;
// }
// return 0;//结果为10个2
//}

//void test()
//{
// static int a = 1;//static修饰是表示为静态环境,不销毁上一步结果
// a++;
// printf("%d\n", a);
//}
//int main()
//{
// int i = 0;
// while (i < 10)
// {
// test();
// i++;
// }
// return 0;//结果为2-11
//}

//extern int g_val; //exter 声明外部符号的
//
//int main()
//{
// printf("%d\n", g_val);
//
// return 0;
//}

//#define MAX 1000

#define ADD(x, y) ((x)+(y))

int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);

sum = 10 * ADD(2, 3);
printf("sum = %d\n", sum);

return 0;

}