常量与变量
字符
运算符
目录
一、常量与变量。
常量的广义概念是:“不变化的量”(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)换言之,常量,在计算机技术 方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。常量可区分为不同的类型,共有六种 整型常量、实型常量、字符常量、字符串常量、符号常量、地址常量,如:25、0为整型常量,6.8为实型常量,‘a’、‘b’为字符常量(用单引号括起来,英文下的),“abc”、“123”字符串常量(用双引号括起来,英文下的)。符号常量:用#define指令指定用一个符号代表一个常量。地址常量:每一个常量、变量、数组的地址在程序运行期间是不能够改变的,称为地址常量。
变量:在程序运行中,值可以改变的量。变量代表一个有名字的、具有特定属性的一个存储单元,可以用来存储数据,也就是变量的值。变量必须先定义后使用。变量名的命名规则应符合标识符命名规则。标识符是用来标识和区分我们所定义的各种数据量,用来标识变量、常量、函数等的字符序列。标识符命名规则:只能由字母、数字、下划线“-”组成, 并且只能由字母和下划线开头。不 允许是关键字,同一个作用域范围内定义的标识符不允许重名。
二、字符。
字符包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符在计算机内存放,应规定相应的代表字符的二进制代码。代码的选用要与有关外围设备的规格取得一致。这些外围设备包括键盘控制台的输入输出、打印机的输出等等。字符作输入时,要自动转换为二进制代码存于机内;输出时,计算机内二进制代码自动转化为字符,两者的转换全是靠外围设备实现的。字符是数据结构中最小的数据存取单位。通常由8个二进制位(一个字节)来表示一个字符。其是数据结构中最小的数据存取单位。
三、运算符。
运算符包括以下几种:
算术运算符:(+-*/%++--)
关系运算符:(<<===>>=!=)
逻辑运算符:((!&&||)
位运算符 :(<<>>~|^&)
赋值运算符:(= 及其扩展)
条件运算符:(?:)
逗号运算符:(,)
指针运算符:(*&)
求字节数:(sizeof)
强制类型转换:(类型)
分量运算符:(.->)
下标运算符:([])
其它:(()-)
算术运算符
(1)算术运算符:用于进行算术运算的特殊符号(+-*/%++--)。
算术运算符的基本使用:
运算符 | 含义 | 举例 | 结果 | 优先级 | 结合性 |
+ | 正号运算符 | +a | a的值 | 2 | 自右至左 |
- | 负号运算符 | -a | a的算术负值 | 2 | 自右至左 |
* | 乘法运算符 | a*b | a和b的乘积 | 3 | 自左至右 |
/ | 除法运算符 | a/b | a除以b的商 | 3 | 自左至右 |
% | 求余运算符 | a%b | a除以b的余数 | 3 | 自左至右 |
+ | 加法运算符 | a+b | a和b的和 | 4 | 自左至右 |
- | 减法运算符 | a-b | a和b的差 | 4 | 自左至右 |
优先级:运算按照 优先级来算,我们平常熟知的是先算乘除再算加减就是按照优先级来计算的,这里的运算亦是如此。
这里说一下结合性,运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大家可以记住一个规律,单目运算符(一元运算符只对一个表达式执行操作,该表达式可以是数值数据类型类别中的任何一种数据类型,例如正负号就是单目运算符)、条件运算符和赋值运算符是自右至左结合的,其他算术运符都是自左至右结合的。
这里先说% 模 求余,例如7%4的输出结果为3
#include <stdio.h>
int main()
{
printf("%d\n",7%4);//结果为3
return 0;
}
加减乘除不用做过多解释
#include <stdio.h>
int main()
{
printf("%d\n",7*4);//结果为28
printf("%d\n",28/4);//结果为7
return 0;
}
(2)自增自减运算符:
自增运算符是两个+连起来的符号(++),作用是使变量的值加一。
自减运算符是两个-连起来的符号(--),作用是使变量的值减一。如下,
#include <stdio.h>
int main()
{
int a=8;
a++;//为9后缀
a--;//为7后缀
++a;//为9前缀
--a;//为7前缀
printf ("%d\n" ,++a);//结果为9
printf("%d\n",--a);//结果为7
return 0;
}
前缀:先自增再参与运算。
后缀:先参与运算再自增。如下,
#include <stdio.h>
int main()
{
int a=8;
//int b=++a;
int c=a++;
//printf ("%d\n" ,b);//结果为9
printf ("%d\n" ,c);//结果为8
return 0;
}
关系运算符
二关系运算符:关系运算符比较运算符两边的表达式的大小关系,其运算过后产生的结果为逻辑值,要么关系表达式为真(逻辑真),运算结果为非0值,要么表达式为假(逻辑假),运算结果为0。
关系运算符 | 含义 | 优先级 | 结合性 |
< | 小于 | 6 | 自左至右 |
<= | 小于等于 | 6 | 自左至右 |
> | 大于 | 6 | 自左至右 |
>= | 大于等于 | 6 | 自左至右 |
== | 等于 | 7 | 自左至右 |
!= | 不等于 | 7 | 自左至右 |
在这里“==”表示等于,而“=”表示赋值的意思。“!=”表示不等于,“>=”表示大于等于,“<=”表示小于等于。与数学中的表示符号有所不同。
#include <stdio.h>
int main()
{
//如果正确即真输出为1,错误即假输出为0,(1代表真,0代表假)输出的结果就这两种
int k=4>3;//此结果为1
int m=4!=4; //此结果是0
printf ("%d\n %d\n",k,m);
return 0;
}
逻辑运算符
逻辑运算符:有与(&&)、或(||)、非(!!)3种。逻辑运算符用干判断运算符两边的表达式的逻辑关系,一般用干连接多个条件表达式。
运算符 | 含义 | 举例 | 说明 | 优先级 | 结合性 |
&& | 逻辑与 | a&&b | a,b都为真则为真 | 11 | 自左至右 |
|| | 逻辑或 | a||b | a,b有一个真则为真 | 12 | 自左至右 |
! | 逻辑非 | !a | a为真,则!a为假 | 2 | 自左至右 |
#include <stdio.h>
int main()
{
int a=8,b=9;
//int c=(a>10)&&(b<10);//此结果为假,一真一假,则为假,
//括号可以不加,优先级不同
//int c=(a>10)||(b<10);//此结果为真
int c=a>b; //为假
//int c= !(a>b); //为真
printf ("%d\n",c);
printf ("%d\n",c);
return 0;
}
位运算符
1、位运算符。
位运算符是针对数据的二进制进行运算的,其中包含左移"<<"、右移">>"、按位非"~"、按位或"|"、按位与"&"、按位异或"^"这六种位运算,其只能对整型数据操作。
2、位运算符的基本使用
①左/右移运算符("<<"、">>"),基本格式:整数<<n、整数>>n,其用于将一个整数的二进制向左/向右移动n个二进制位。
②按位非运算符"~",基本格式:~整数,用于将一个整数的二进制各位取反,1变0,0变1。
③按位或''|"和按位与'&' 基本格式:整数整数、整数&整数,用于将两个整数的各位二进制相或/相与。
④按位异或'^',基本格式:整数^整数,用于将两个整数的二进制相异或。遵循相同为0,相异为1的规则。
左移:<<左移相当于乘以2的n次方,移几位就乘以2的几次方。
右移:>>右移相当于除以2的n次方,移几位就除以2的几次方。
移动的是二进制位,一个字节=八位
0000 0000
int 占位4字节即 0000 0000 0000 0000 0000 0000 0000 0000
int 10就为 0000 0000 0000 0000 0000 0000 0000 1010 (一般写为0000 1010 前面的零无意义省略不写)。
如果左移1位就是 0001 0100(最后的用0填位)。以此类推,右移同样。
#include <stdio.h>
int main()
{
//int a=10;
//printf ("%d\n",a<<1);//为20
//printf ("%d\n",a<<2);//结果为40.
int a=40;
//printf ("%d\n",a>>1);//结果为20
printf ("%d\n",a>>2);//结果为10
return 0;
}
按位非:~ 二进制1变0,0变1.二进制最高位为符号位 0为正数,1为负数。
二进制数:原码 反码 补码
正数原码:0000 0000 0000 0000 0000 0000 0000 1010
反码: 0000 0000 0000 0000 0000 0000 0000 1010
补码: 0000 0000 0000 0000 0000 0000 0000 1010
负数原码: 1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码=反码+1 1111 1111 1111 1111 1111 1111 11111
此处不多做解释.
#include <stdio.h>
int main()
{
int a=10;
printf ("%d\n",~a);//结果为-11
return 0;
}
按位与:| 对应位置有1则为1,否则为0
#include <stdio.h>
int main()
{
int a=4;
int b=3;
//0000 0100
//0000 0011
//0000 0111=7
printf ("%d\n",a|b);//结果为7
return 0;
}
按位或 & 对应位置都为1则为1否则为
#include <stdio.h>
int main()
{
//int a=4;//0000 0100
//int b=3;//0000 0011
//a&b; //0000 0000
//printf ("%d\n",a&b);//结果为0
int a=7;//0000 0111
int b=6;//0000 0110
a&b; //0000 0110
printf ("%d\n",a&b);//结果为6
return 0;
}
按位异 ^ 对应位置,相同为0,不同为1
#include <stdio.h>
int main()
{
int a=6;//0000 0110
int b=4;//0000 0100
a^b //0000 0010=2
printf ("%d\n",a^b);//结果为2
return 0;
}
赋值运算符:赋值运算符:赋值符号 就是赋值运算符,用于给变量赋值,和算术运算符组合可以构成复合赋值运算符。
赋值运算符 | 优先级 | 结合性 |
= | 14 | 自右至左 |
+= | 14 | 自右至左 |
-= | 14 | 自右至左 |
*= | 14 | 自右至左 |
/= | 14 | 自右至左 |
%= | 14 | 自右至左 |
#include <stdio.h>
int main()
{
int a=6;
//=表示赋值
int b=4;
//a+=b;//a=a+b
//a-=b;//a=a-b
//a*=b;//a=a*b
//a/=b;//a=a/b
//a%=b;//a=a%b
printf ("%d\n",a);
return 0;
}
逗号运算符 ,
#include <stdio.h>
int main()
{
int a=(1,2,3,4,5,6,7);
//将1,2,3,4,5,6,7,依次赋值给a,直到7,最终为7
printf ("%d\n",a);
return 0;
}
强制运算符:()
#include <stdio.h>
int main()
{
double b=(int)'a';
printf ("%lf\n",b);
return 0;
}
条件运算符:表达式1?表达式2:表达式3
表达式的结果为真,执行表达式2,否则执行表达式3
#include <stdio.h>
int main()
{
int a=10;
int b=2;
printf ("%d\n",a>b?a:b);
return 0;
}
sizeof():求类型大小
#include <stdio.h>
int main()
{
printf ("%d\n",sizeof(11));//4
printf ("%d\n",sizeof (float));//4
printf ("%d\n",sizeof (char));//1
return 0;
}
操作数:一个运算符要用到几个变量计算,比如用到两个叫做双目
表达式:
1、表达式的含义以及组成:用运算符和括号将运算对象(也叫操作数)连接起来的、符合C语言语法规则、用于相关运算的式子,称为C语言表达式。运算对象包括常量、变量、函数等。
2、示例:例如一个合法的算术表达式:a*b/c-1.5+'a"
3、执行规则:在计算表达式的值时,应先按运算符的优先级别顺序执行,例如先乘除再加减。存在同一级别的运算符做运算时,则需要看运算符的结合性。(同一级别的运算符结合性是一致的,可以用小括号改变运算的优先级)