返回

C语言操作符

发布时间:2022-12-16 04:54:07 337

C语言的操作符分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号操作符、下标引用,函数调用和结构成员。 

一、算术操作符(双目)

  +  -  *  /  %

1.除了%,其他均可以作用于整数和浮点数

2./:两个都是整数,整数除法,如果结果有小数就省略(不会四舍五入),有浮点数就是浮点数除法

3.%要求两个操作数都是整数,返回整除后的余数 例如11.0%5是错误的,没有结果

4.*在字母与字母,数字与字母之间不能省略,不能将数学习惯带入编程

5.如果不了解优先级,将你想先算的部分加上括号

二、移位操作符(以二进制位)

1.<<左移操作符:左边抛弃、右边补零

2.>>右移操作符:分为两种 算术右移,右边抛弃,左边补原符号位(正数符号位是0,负数符号位是1)一般是算术右移。

                                         逻辑右移,右边抛弃,左边补零

使用:

int a=6;
int b=a<<1;

整数的二进制表示有原码、反码和补码,计算机以补码形式储存到内存。

正数原反补相同,用原码表示一个负数,符号位不变,其他位按位取反得到反码,反码+1得到补码(原码得到补码的快捷方法:从右到左,遇到的0不变,第一个1不变,这个1左边的所有位按位取反,但符号位不变)  

⚠:对于移位运算符,不要移动负数位,是标准未定义的如

Num=10,num>>-1//error

三、位操作符(按二进制位)(双目)

&  按位与   |  按位或   ^按位异或

&有0则0,都1则1,负数用补码表示

int a=2;
int b=3;
int c=a&b;

| 有1则1,全0则0

^相同为0,相异为1

它们的操作数都是整数

//例题:不创建临时变量实现两个数交换。
#include
int main(){
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
printf("a=%d b=%d\n",a,b);
return 0;
}
//法二:加减法
a=a+b;
b=a-b;
a=a-b;
//缺点:a+b可能会溢出
//求一个整数存储在内存中的二进制中1的个数
#include
int main(){
//法一
int num=10;
int count=0;//计数
while(num){
if(num%2==1)
count++;
num=num/2;
}
}
return 0;
//法二
int num=0;
int count=0;
scanf("%d",&num);
int i=0;
for(i=0;i<32;i++){
if(i==((num>>i)&1))
count ++;
}
}

四、赋值操作符=(双目)

可以在一条语句中连续赋值(不建议)

x=x+1在数学中是错误的,在编程中是正确的,它的意思是将x+1的结果赋值给x

五、复合操作符(双目)

+=    -=    *=    /=    %=    >>=    <<=    &=    |=    ^=

例题   1<5+9<7结果为多少

<的结合方向是从左向右,5+9=14,1<14为真,左侧表达式结果为1,1<7结果为真,最后结果为1

六、单目操作符

!逻辑反操作    -负值    +正值    &取地址    sizeof操作数类型长度(以字节为单位)    ~对一个数的二进制按位取反    --前置后置--    ++前置后置++    *间接访问操作符(解引用操作符)    ()强制类型转换

int a=10;
int* p=&a;
*p=20;//指针
sizeof(a)==sizeof(int)//变量的()可以省略,类型的 ()不能省略
sizeof(p)==sizeof(int*)
int arr[10]={0};
sizeof(arr)==sizeof(int [10])
int a=10;
short s=0;
sizeof(s=a+5)//2

最后s值不变,还是0,sizeof()里的式子不参与运算。

int a=0;//0是整数
//00000000000000000000000000000000
//11111111111111111111111111111111补码
//11111111111111111111111111111110反码
//10000000000000000000000000000001原码
//输出原码-1
printf("%d\n",~a);

++a,先++,后使用,a++,先使用,后++,--同理

七、关系操作符(双目)

 >    >=    <    <=    !=    ==(不要写成=)

八、逻辑操作符(双目)

&&逻辑与全真为真,有假为假   ||逻辑或有真为真,全假为假

int i=0,a=0,b=2,c=3,d=4;
i=a++&&++b&&d++//a++是0,为假,右边就不再算了
//a=1,b=2,c=3,d=4
//若改a=1,结果为1335
//若该为||,结果为2234,a++为真,后面就不算了

九、条件操作符(三目)

exp1 ? exp2:exp3

如果exp1为真,表达式的结果为exp2的结果;如果exp1为假,表达式的结果为exp3的结果。

功能等同于if-else。

十、逗号操作符(双目)

用逗号隔开多个表达式,从左向右执行,前一个表达式会对后面的表达式产生影响,整个表达式的结果是最后一个表达式的结果(不能只算最后一个结果,最后的结果是整个表达式共同完成的)。

十一、下标引用、函数调用和结构成员(双目)

1.[]下标引用操作符  操作数:一个数组名+一个下标值

int arr[10];
arr[9]=10;//[]的两个操作数是arr和9

2.()函数调用操作符  一个或多个操作数:第一个操作数是函数名,剩余的操作数是传递给函数的参数。

3.访问一个结构的成员

.  结构体.成员名

->   结构体指针->成员名

struct Stu
{
char name[20];
int age;
char id[20];
};
int main(){
int a=10;
struct Stu s1={"张三",20,"123456789"};
printf("%s\n",s1.name);
printf("%d\n",s1.age);
printf("%s\n",s1.id);
return 0;
}
struct Stu
{
char name[20];
int age;
char id[20];
};
int main(){
int a=10;
struct Stu s1={"张三",20,"123456789"};
struct Stu* ps=&s1;
printf("%s\n",(*ps).name);//ps->name
printf("%d\n",(*ps).age);//ps->age

补充:1.注释  //注释该行。

                    /* */中间注释掉,可以多行,visual studio中有快捷键。

                    增加可读性,删除不需要的代码。

          2.双目操作符两侧操作数类型要相同,不相同会有类型转换。

          3.非零即为真,例如b=2是真。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
C语言随机出题100以内的加减法 2022-12-16 04:11:29