标识符

起变量名、宏名、数组名、结构体名、重定义名、函数名等名字
定义标识符的规则:
1.以字母、数字、下划线构成
2.第一个字符不能是数字
3.不能和关键字相同
4.见名知意
变量:
概念:在程序运行过程中会发生变化的量
定义格式:
[存储类型] 数据类型 变量名;

运算符

算数运算符:+ 、- 、* 、/

/:整除取整
%:小数灭有余数
++:
int a=5;
a++;//a=a+1;
a—;//a=a-1;
a++;//a=a+1;
先赋值后自加1
++a;//a=a+1;
先自加1后赋值
单独成句使用的时候都进行了自加1,没有区别

a—;//a=a-1;
先赋值后自减1
—a;//a=a-1;
先自减1后赋值
单独成句使用的时候都进行了自减1,没有区别

练习:
1. 以下程序输出结果是
#include
int main(int argc, char argv[])
{
int a = 10;
int b = a++;//b=10 a=11
int c = a + b;//c=21
int d = (b++) +c;//10+21=31 b=11
printf(“%d = \n”,d);
return 0;
}
[单选题]

A. d = 31
B. d = 32
C. d = 33
D. d = 34

  1. include

    int main(int argc, char argv[])
    {
    int a = 10;
    int b = a—;//b=10 a=9
    int c = a + b + 2;//21
    int d = (b—) + (++c); //c=22 d=10+22=32 b=9
    printf(“%d\n”,d);
    }
    [单选题]

    A. d = 31
    B. d = 32
    C. d = 33
    D. d = 34

    3.#include
    int main(int argc, char argv[])
    {
    int a = 10;
    int b = ++a;//a=11 b=11
    int c = a + (b++);//c=11+11=22 b=12
    int d = b+c;//d=22+12=34
    printf(“%d\n”,d);
    return 0;
    }
    [单选题]

    A. d = 31
    B. d = 32
    C. d = 33
    D. d = 34

    关系运算符:>、<、>=、<=、==、!=

    ==:判断左右两边的值是否相等
    !=:判断左后两边的值是否不相等
    关系成立返回值1,不成立返回0
    C语言中0位假,非0为真

    赋值运算符:=、+=、-=、*=、%=、/=、&=、|=、^=……

    =:将等号左边的值赋给等号右边变量
    a+=b;//a=a+b;
    a-=b;//a=a-b;

    逻辑运算符:

    &&:逻辑与(都为真,则为真。一个为假,则为假)
    截断法则:第一个表达式为假,第二个表达式不再进行判断,直接输出逻辑关系为假
    ||:逻辑或(都为假,则为假。一个为真,则为真)
    截断法则:第一个表达式为真,第二个表达式不再进行判断,直接输出逻辑关系为真
    !:逻辑非(真变假,假变真)
    问:!a什么时候这个表达式是成立的?a=0
    a==0和成立条件一样

    位运算:

    &:位与(全1为1,有0则0)
    int a=5,b=11;a&b?
    0101
    &
    1011
    ———————
    0001 = 1
    |:位或(有1为1,全0为0)
    int a=5,b=11;a|b?
    0101
    |
    1011
    ———————-
    1111 = 5
    ^:异或(相同为0,不同为1)
    int a=5,b=11;a^b?
    0101
    ^
    1011
    ———————
    1110 = 14
    ~:按位取反(0变1,1变0)

    补充:

    数值在计算机中存放都是补码
    正数:正数的原码、反码、补码都一样
    负数:负数反码等于原码除符号按位取反
    补码等于反码加1
    举例:
    int -6:
    原码:1000…0000110
    反码:1111…1111001
    补码:1111…1111010 将补码作为原码再求补码,求出来的补码就是原码
    对补码再求补码得到是原码
    反:1000…0000101
    补:1000…0000110 = -6
    <<:左移
    左移多少位,右边添加多少个0,左边删除多少位
    int a=5;a<<3
    0000…0000101 << 3 ———->0…0000101000=40
    52^3倍
    *>>:右移

    正数:右移多少位,左边添加多少个0,右边删除多少位
    负数:右移多少位,左边添加多少个1,右边删除多少位
    int a=5; a>>2?
    0000…0000101>>2 —>000000…00001 =1
    5/2^2

-6: -6>>2
原码:1000…0000110
反码:1111…1111001
补码:1111…1111010 >> 2
111111…11110
反:100000…00001
补:100000…00010 = -2
-6/2^2
取数的时候往小的数取
eg:-1.4就取-2、-0.7就取-1

三目运算:

格式:表达式1?表达式2:表达式3;
执行顺序:
先判断表达式1是否成立,成立执行表达式2,不成立执行表达式3