目录
1.按位取反
~: 按(2进制)位取反
- 整型数据数值是以补码的形式表示的,正数补码与原码相同
- 对于有符号正数,计算机内存中最左边表示符号位,0为正 1为负
- 负数的补码是将该数绝对值的二进制形式按位取反后再加1得到的
- 整数的补码是将该数绝对值的二进制形式安慰去饭后再减1得到的
- 原码直接按照正负写出的二进制序列(符号位不变)
- 负数在计算机存储中用补码存储
#include <stdio.h>
int main()
{
//补码 ——> 反码 ——> 原码码
//负数在内存中存储的时候,存储的是二进制的代码
//00000000000000000000000000000000 -二进制码
//11111111111111111111111111111111 -补码
//11111111111111111111111111111110 -反码
//10000000000000000000000000000001 -原码(反码-1)
int a = 0;
int b = ~a;
printf("%d\n", b);
return 0;
}
2.自动运算
- 后置++:a的值赋予b,然后再给a+1
- 前置++:先给a+1,再赋a+1的值予b
- 后置–:a的值赋予b,然后再给a-1
- 前置–:先给a-1,再赋a-1的值予b
#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//后置++,先使用,再++
//a = 11,b = 10
int b = ++a;//前置++,先++,后使用
//a = 11,b = 11
int b = a--;//后置--,先使用,再--
//a = 9 ,b = 10
int b = --a;//前置--,先--,后使用
//a = 9 , b = 9
printf("a = %d b = %d\n", a, b);
return 0;
}
3.逻辑运算符
#include <stdio.h>
int main()
{
//真 - 非0
//假 - 0
//&& - 逻辑与
//|| - 逻辑或
int a = 0;
int b = 5;
int c = a || b;
printf("c = %d\n", c);//逻辑中两变量都为1则为1,只要有一个为0则为0
int c = a && b;
printf("c = %d\n", c);//逻辑中两变量其中一个为1则为1,否则为0
return 0;
}
4.条件运算符
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);
//同等于
if (a > b)
{
max = a;
}
else
{
max = b;
}
printf("最大值是:%d\n", max);
return 0;
}
5.下标引用、函数调用运算符
- [ ]:下标引用操作符
- ( ):函数调用操作符
#include <stdio.h>
int Add(int x,int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int arr[10] = {0};
arr[4];//[] - 下表引用运算符
int a = 10;
int b = 20;
int sum =Add(a, b);//() -- 函数调用运算符
return 0;
}
6.关键字
关键字 |
说明 |
auto | 声明自动变量 |
short | 声明短整型变量或函数 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数 |
float | 声明浮点型变量或函数 |
double | 声明双精度变量或函数 |
char | 声明字符型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共用数据类型 |
enum | 声明枚举类型 |
typedef | 用以给数据类型取别名/定义 |
const | 声明只读变量 |
unsigned | 声明无符号类型变量或函数 |
signed | 声明有符号类型变量或函数 |
extern | 声明变量是在其他文件正声明 |
register | 声明寄存器变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与 if 连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
for | 一种循环语句 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
goto | 无条件跳转语句 |
continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 |
default | 开关语句中的“其他”分支 |
sizeof | 计算数据类型长度 |
return | 子程序返回语句(可以带参数,也可不带参数)循环条件 |
7.常用关键字
(1)typedef:类型定义 -类型重定义
#include <stdio.h>
int main()
{
typedef unsigned int u_int;
unsigned int num1 = 0;
u_int num2 = 0;
return 0;
}
(2)static
- static 修饰局部变量延长局部变量的生命周期
- static 修饰全局变量改变了变量的作用域
- 改变了变量的作用域让静态的全局变量只能在自己的所在的源文件内部使用 出了源文件就没法再使用了
- static 修饰函数也是改变了函数的作用域
- static修饰函数改变了函数的链接属性
- 外部链接属性 ——> 内部链接属性
代码1:
#include <stdio.h>
void test()
{
static int a = 1;//a 是一个静态的局部变量
a++;
printf("a =%d\n", a);//2 3 4 5 6
}
int main()
{
int i = 0;
while (i<5)
{
test();
i++;
}
return 0;
}
代码2:
#include <stdio.h>
void test()
{
static int i = 0;
i++;
printf("%d", i);
}
int main()
{
int i = 0;
for(i = 0; i < 10; i++)
{
test();
}
return 0;
}
8.#define定义常量
-
#define 定义标识符常量
-
#define 可以定义宏-带参数
#include <stdio.h>
int Max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
//宏的定义
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
int a = 10;
int b = 20;
int max = Max(a, b);
printf("max = %d\n", max);
//宏的方式
max = MAX(a, b);
//max = (a>b?a:b)
printf("max = %d\n", max);
getchar();
return 0;
}
9.指针
-
指针变量:一种是用来存放地址的变量
-
指针大小在
32位
平台是
4
个字节,
64位
平台是
8
个字节
#include <stdio.h>
int main()
{
int a = 10;//申请了4个字节的空间
printf("%p\n", &a);
int* p = &a;//取地址(随机)
//p是一个变量-指针变量
printf("%p\n", p);
*p = 20;//- 解引用操作符/间接访问操作符
printf("a = %d\n", a);
return 0;
}
10.计算机 存储数据
- 硬盘
- 内存——CPU
- 高速缓存
- 寄存器——CPU
11.
结构体
- struct – 结构体关键字
- 结构体:属于复杂对象,是我们自己创造出来的一种类型
- strcpy(string copy):字符串拷贝-用到库函数-string.h
- 赋值按照定义的变量顺序进行
#include <stdio.h>
#include <string.h>
//创建一个结构体类型
struct Book
{
char name[20];
short price;//55
};
int main()
{
//利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计", 55};
struct Book* pb = &b1;
//利用pb打印出我的书名和价格
// -> 结构体指针使用->
printf("%s\n",pb->name);
printf("%d\n",pb->price);
// . 结构体实用变量使用.成员
printf("%s\n", b1.name);
printf("%d\n", b1.price);
//同理用*指针
printf("%s\n",(*pb).name);
printf("%d\n",(*pb).price);
b1.price = 15;
printf("%d\n", b1.price);
//赋值按照定义的变量顺序进行
strcpy(b1.name, "C++");
printf("%s\n", b1.name);
return 0;
}
版权声明:本文为HyDraZya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。