原码,反码,补码

负数在内存中存储的时候,储存的是二进制的补码

二进制最高位存储的是符号位,如果为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;
}