C语言学习1.1——变量与运算符

.变量

4.1变量的基础

变量在程序中用变量名表示,变量名由用户根据其用途任意命名。

变量名由字母、数字、下划线组成,不能以数字开始,不能和C的关键字重名

在程序运行时,变量占据存储空间的大小由其数据决定

变量在内存空间中的首地址,称为变量的地址。

4.2变量的说明

变量在程序中使用时,必须预先说明它们的存储类型和数据类型。

说明的一般形式是:

<存储类型> <数据类型> <变量名>

<存储类型> 是关键词 auto registerstatic extern

<数据类型>可以是基本数据类型, 也可以是 自定义的数值。

4.3变量的存储类型

4.3.1 auto

说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句中(默认是
随机数)。
在函数体的某程序段内说明 auto 存储类型的变量时,以省略关键字 auto, 如:
auto  int k ;
int j;
double x ;

4.3.2 register

称为寄存器型,register变量想将变量放入CPU的寄存器中,这样可以加快程序的运行速

度。

如申请不到就使用一般内存,同auto

register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的

,并且长度应该小于或等于整形的长度。

不能用“&”来获取register变量的地址

由于寄存器的数量有限,真正起作用的register修饰符的数目都依赖于运行程序的机

器。

在某些情况下,把变量保存在寄存器中反而会降低程序运行速度。因为被占用的寄存

器不能在用于其他目的,或者变量被使用的次数不够多,不足以装入和存储变量所带

来的额外开销

4.3.3 static

static变量称为静态存储类型的变量,既可以在函数体内,也可在函数体外说明情况。(默

认为0

局部变量使用static修饰有以下特点:

在内存中以固定地址存放,而不是以堆栈形式存放

只要程序没有结束,就不会随着说明他的程序段的约束而消失,它下次再调用该函

数,该存储类型的变量不会重新说明,而且还保留上次调用存储

4.3.4 extern

当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变

量。

extern称为外部参照引用型,使用extern说明的变量是想引用在其他文件的中函数体外外

部声说明的变量。(记得声名     //ectern int  a;)

static修饰的全部变量,其他文件无法使用。

.运算符

5.1 算数运算符

C语言提供的算数运算符: + - * / % ++ 如:(floatdouble 不能取余)

#include<stdio.h>
int main()
{
    int a=15,b=8,x,y,z,m,n;
    x=a+b;
    y=a-b;
    z=a/b;
    m=a*b;
    n=a%b;
    printf("x=%d y=%d z=%d m=%d n=%d",x,y,z,m,n);

}

5.2 关系运算符

C语言的关系运算符如下:

#include<stdio.h>
int main()
{
    int a=15,b=8,x,y,z,m,n,q;
    x=a>b;
    y=a>=b;
    z=a<b;
    m=a<=b;
    n=a==b;
    q=a!=b;
    printf("x=%d y=%d z=%d m=%d n=%d q=%d",x,y,z,m,n,q);

}

逻辑运算符运算符的运算律如下:

#include<stdio.h>
int main()
{
    int a=6,b=0,x,y,z,m,n;
    x=!a;
    y=a&&b;
    z=a||b;
    m=(a+!b)&&(a||b);
    printf("x=%d y=%d z=%d m=%d",x,y,z,m);
    return 0;
}

逻辑与 “&&” 运算符的运算规律如下:短路特性-0截止

#include<stdio.h>
int main()
{
    int a=6,b=0,x,y,z,m,n;
    x=(a>=3)&&(b>!a);
    y=(b>1)&&(a==6);
    z=(b<a)&&(b>a);
    m=(a>0)&&!(b>=a);
    printf("x=%d y=%d z=%d m=%d",x,y,z,m);
    return 0;
}

逻辑或 ”||“ 运算符的运算规律如下:短路-1截止

#include<stdio.h>
int main()
{
    int a=6,b=0,x,y,z,m,n;
    x=(a>=3)||(b>!a);    //10
    y=(b>1)||(a==6);     //01
    z=(b<!a)||(b>a);     //00
    m=(a>0)||!(b>=a);    //11
    printf("x=%d y=%d z=%d m=%d",x,y,z,m);
    return 0;
}

5.4 位运算

C语言的位运算如下:(对二进制进行操作)

位运算反 ”~“ 运算符

#include<stdio.h>
int main()
{
    unsigned char  a=0x17,x=0;
    x=~a;
    printf("x(10)=%x x(16)=%#x",x,x);
    return 0;
}

位运算与 ”&“ 运算符的运算规律如下:

#include<stdio.h>
int main()
{
    unsigned char a=0126,b=0xac,z;
    z=a&b;    //&操作于二进制码
    printf("z=%d\n",z);
}

位运算与 ”| 运算符的运算规律如下:

#include<stdio.h>
int main()
{
    unsigned char a=076,b=0x89,z;
    z=a|b;    //&操作于二进制码
    printf("z=%d\n",z);
}

位逻辑异或”^“运算符的运算规律如下:相同为假,不同为真

#include<stdio.h>
int main()
{
    unsigned char x=75,y=0173,z;
    z=x^y;
    printf("z=%d\n",z);
    return 0;
}

位运算的一般形式

<运算量> <运算量><表达式>其中 :

<运算量>必须为整形结果数值;

<运算符>为左移(<<)或右移(>>)运算符;

<表达式>也必须为整形结果数值

#include<stdio.h>
int main()
{
    unsigned char x=0xe4,z;
    z=x<<3;
    printf("z=%d\n",z);
    return 0;
}

如何快速把一个无符号位快速置1或者置0

5.5 赋值运算符

赋值运算符为”=“,其运算的一般形式如下:

<左值表达式> = <右值表达式>

赋值复合运算符其运算的一般形式如下:

<变量> <操作符> = <表达式>

C语言的赋值复合运算符如下:

#include<stdio.h>
int main()
{
    int count,sum;
    count =0,sum=0;
    while(count++<100)
    {
        sum+=count;
    }
    printf("sum=%d\n",sum);
    return 0;
}

5.6 特殊运算符

5.6.1 条件运算符

?:是三目运算符,其运算的一般形式是:

<表达式1 ><表达式2>:<表达式3>

#include<stdio.h>
int main()
{
    int x=82,y=101,a,b;
    a=(x>y? x+18 : y-100);
    b=(x<(y-11)? x-22:y-1);
    printf("a=%d b=%d\n",a,b);
    return 0;
}

#include<stdio.h>
int main()
{
    int x,y=25;
    x=70;
    y=x++>70?100:0;
    printf("x=%d y=%d\n",x,y);
    return 0;
}

5.6.2 逗号运算符

#include<stdio.h>
int main()
{
    int x=10,y=25,m,n,q;
    m=(x=y=5,x+=1);   //x=x+1   其中x由前面可知为5   故x=5+1=6
    n=(x=1,y=3,q=0);  //n的值由最后一个式子的结果决定
    printf("m=%d n=%d\n",m,n);
    return 0;
}

5.6.3 sizeof运算符

运算符的一般形式:sizeof(类型或变量名)

注意:它只针对数据类型,而不针对变量   用以求出某一数据类型所占字节数

#include<stdio.h>
int main()
{
    int a;
    char b;
    long c;
    printf("a=%d b=%d c=%d\n",sizeof(int),sizeof(char),sizeof(long));
    return 0;
}

5.6.4 C运算符的优先级

#include<stdio.h>
int main()
{
    int x=1,y=0,z=0,m,n,q;
    m=(x++ && y++ || ++z);
    n=(!(x+1 >0) && y++ || ++z);
    q=(x+=y==z,y=x+2,z = x+y+z>0);
    printf("m=%d n=%d q=%d\n",m,n,q);
    return 0;
}

技巧小课堂:

像z++,++z这种,++在前先自增再进行式子的计算,如果++在后就先进行式子的计算,然后再进行自增

++在前,先自增

++在后,先计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值