原码,反码,补码
负数在内存中存储的时候,储存的是二进制的补码
二进制最高位存储的是符号位,如果为1则表示的是一个负数,0是正数
原码符号位(最高位)不变,其他位按位取反得到的是反码。
反码加1得到的是补码。
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
int a = 0;
//00000000000000000000000000000000
int b = ~a;//b是有符号位的整形
//11111111111111111111111111111111
//原码,反码,补码
//负数在内存中存储的时候,储存的是二进制的补码
//二进制最高位存储的是符号位,如果为1则表示的是一个负数,0是正数
//使用的打印的是这个数的原码
//原码符号位不变,其他位按位取反得到反码
//反码+1得到的是补码
//11111111111111111111111111111111
//11111111111111111111111111111110
//10000000000000000000000000000001
printf("%d", b);// b = -1
return 0;
}
--
++ 前置(先++在使用)、后置++(先使用在++)
前置(先--在使用)、后置--(先使用在--)
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
int a = 10;
int b = a++;
printf("%d %d", a, b);//11 10
int c = ++a;
printf("%d %d", a, c);//12 12
return 0;
}
(类型)强制类型转换
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
int a = (int)3.14;
return 0;
}
关系操作符
>
>=
<
<=
!= 判断不相等
== 判断相等
逻辑操作符
计算机判断0为假,非0则为真
&& 逻辑与 -- (有一个假则是假)
|| 逻辑或 -- (有一个真则为真)
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
//0表示假,非0则是真
//&&有一个假则是假
//||有一个真则为真
int a = 0;
int b = 5;
int c = a && b;
int d = a || b;
printf("%d", c);//0
printf("%d", d);//1
return 0;
}
条件操作符
exp为表达式
exp1 ? exp2 : exp3
如果表达式exp1为真则表达式exp2被执行,
如果表达式exp1为假则表达式exp3被执行。
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);
//如果表达式exp1为真则表达式exp2被执行,
//如果表达式exp1为假则表达式exp3被执行。
printf("%d", max);//20
return 0;
}
逗号表达式
exp1 , exp2 , exp3 , ....expN
下标引用、函数调用和结构成员
[] () . ->
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//int arr[4];//下标操作符
printf("%d", arr[4]);//5
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int add(int x, int y)
{
int z = x + y;
return z;
}
int main()
{
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
c = add(a, b);
printf("%d", c);
return 0;
}
常见关键字 -自己定义的不能和关键字冲突
auto(自动变量 -默认省略) break(跳出循环) case(switch)
char(字符型) const(常变量) continue(继续)
default(默认) do(循环) double(双精度浮点型)
else (if else语句) enum(枚举常量) extern(引入外部符号)
float(单精度浮点型) for(循环) goto(语句)
If(循环) int(整形) long(长整型)
register(寄存器关键字) return(返回) short(短整型)
signed(省略 有符号数) sizeof(计算大小) static(静态的)
struct(结构体关键字) switch(case语句) typedef(类型定义)
union(联合体) unsigned(无符号数) void(空)
volatile(后期介绍) while(循环)
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
//typedef - 类型定义 - 类型重定义
typedef unsigned int u_int;
unsigned int num1 = -20;
u_int num2 = -20;
return 0;
}
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
void test()
{
//static修饰局部变量
//延长局部变量生命周期
//static修饰全局变量
//改变变量作用域 - 让静态的全局变量只能在自己所在的源文件使用
//出了源文件就无法使用
//static修饰函数 -改变了链接属性
//改变作用域 - 变为内部链接属性
static int a = 0;//a变成静态变量输出结果1-5
a++;
int b = 1;
b++;
printf("a = %d\n", a);
printf("b = %d\n", b);//结果5个2
}
int main()
{
int i = 0;
while (i<5)
{
test();
i++;
}
return 0;
}
#define 定义常量和宏
#define定义标识符常量
#define max 1000
#define定义宏
#define add(x,y) ((x)+(y))
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
//#define定义标识符常量
#define max 1000
//#define定义宏 - 带参数
#define MAX(x,y) (x>y?x:y)
int main()
{
int a = 10;
int b = 20;
int s = MAX(a, b);
printf("s = % d", s);
return 0;
}
指针
为了有效使用内存,把内存划分成一个个小的内存单元,每个内存单元一个字节
为了有效访问到内存每个单元,给内存进行编号,这些编号成为该内存单元的地址
存啥用啥类型
Int* a = &b;(32位4个字节,64位8个byte)
#define _CRTSECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int* b = &a;
*b = 20;
printf("%d", a);//20
return 0;
}