首页 > 其他分享 >C语言操作符详解

C语言操作符详解

时间:2022-12-12 20:01:55浏览次数:52  
标签:int C语言 -- 详解 操作符 includeint printf main

操作符分类:

  1. 算术操作符
  2. 移位操作符
  3. 位操作符
  4. 赋值操作符
  5. 单目操作符
  6. 关系操作符
  7. 逻辑操作符
  8. 条件操作符
  9. 逗号表达式
  10. 下标引用,函数调用和结构成员



算术操作符(+ - * / %)

1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。

2.对于/操作符,如果两个操作符都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。

#include<stdio.h>
int main()
{
int a = 5 / 2;//商2余1
int b = 5 % 2;//商2余1
double c = 5 / 2.0;
printf("a=%d\n", a);//2
printf("a=%d\n", b);//1
printf("a=%lf\n", c);//2.500000
return 0;
}



位移操作符(<< --左移操作符 >> --右移操作符)

警告:对于移位操作符,不要移动负数位,这个是标准未定义的。

C语言操作符详解_数组



右移操作符 向右移动1位有/2(除以2)的效果 --通常都是算术右移

1.算术右移(正数--符号位是0     负数--符号位是1)  规则:右边丢弃,左边补原符号位

2.逻辑右移    规则:右边丢弃,左边补0

#include<stdio.h>
int main()
{
int a = 16;
// >> -右移操作符
//移动的是二进制位
//00000000000000000000000000010000
//00000000000000000000000000001000
int b = a >> 1;
printf("%d\n", b);//8
return 0;
}
#include<stdio.h>
int main()
{
int a = -1;
//整数的二进制表示有:原码,反码,补码
//存储到内存中的是补码
//正整数的原反补是相同的
//10000000000000000000000000000001 --原码
//11111111111111111111111111111110 --反码 符号位不变,其他位按位取反
//11111111111111111111111111111111 --补码 反码+1

//11111111111111111111111111111111
int b = a >> 1;
printf("%d\n", b);
return 0;
}


左移操作符 向左移动1位有*2(乘2)的效果

规则:左边丢弃,右边补0

#include<stdio.h>
int main()
{
int a = 5;
int b = a << 1;
//00000000000000000000000000000101
//00000000000000000000000000001010
printf("%d\n",b);//10
return 0;
}



位操作符(&-按位与 |-按位或 ^-按位异或)

//& -按位(二进制位)与
#include<stdio.h>
int main()
{
int a = 3; //00000000000000000000000000000011
int b = 5; //00000000000000000000000000000101
int c = a & b; //00000000000000000000000000000001
printf("%d\n", c);//1
return 0;
}
  //| -按位(二进制位)或
#include<stdio.h>
int main()
{
int a = 3; //00000000000000000000000000000011
int b = 5; //00000000000000000000000000000101
int c = a | b;//00000000000000000000000000000111
printf("%d\n", c);//7
return 0;
}
//^  -按位(二进制位)异或
//相同为0,相异为1
#include<stdio.h>
int main()
{
int a = 3; //00000000000000000000000000000011
int b = 5; //00000000000000000000000000000101
int c = a ^ b; //00000000000000000000000000000110
printf("%d\n", c);//6
return 0;
}



一套变态的面试题

不能创建临时变量(第三个变量),实现两个数的交换

#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int tmp = 0;
printf("before:a=%d b=%d", a, b);
tmp = a;
a = b;
b = tmp;
printf("after:a=%d b=%d", a, b);
return 0;
}
//加减法
//缺陷:可能会溢出
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("a=%d,b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d\n", a, b);
return 0;
}
//按位异或(面试可能会考)
//缺陷:执行效率不高,可读性较差
#include<stdio.h>
int main()
{
int a = 3; //011
int b = 5; //101
printf("before:a=%d b=%d", a, b);
a = a ^ b; //110
b = a ^ b; //011
a = a ^ b; //101
printf("after:a=%d b=%d", a, b);
return 0;
}



练习

编写代码实现:求一个整数存储在内存中的二进制中1的个数

//这种方法存在问题
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf("%d", &num);
//统计num的补码中有几个1
while (num)
{
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("%d\n", count);
return 0;
}
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
int i = 0;
scanf("%d", &num);
for (i = 0; i < 32; i++)
{
if (1 == ((num >> i) & 1))
count++;
}
printf("%d\n", count);
return 0;
}



赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

#include<stdio.h>
int main()
{
int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符。
return 0;
}

复合赋值符(+= -= /= %= <<= >>= &= \= ^=)

#include<stdio.h>
int main()
{
int a = 10;

a = a + 2;
a += 2;//符合赋值符

a = a >> 1;
a >>= 1;

a = a & 1;
a &= 1;
return 0;
}



单目操作符 --只有一个操作数

a+b --有两个操作数  +是双目操作符


  1. !--逻辑反操作符
  2. - --负值
  3. + --正值
  4. & --取地址
  5. sizeof --操作数的类型长度(以字节为单位)
  6. ~ --对一个数的二进制按位取反
  7. -- --前置、后置--
  8. ++ --前置、后置++
  9. * --间接访问操作符(解引用操作符)
  10. (类型) --强制类型转换
//!  --逻辑反操作符
#include<stdio.h>
int main()
{
int a = 0;
if (!a)
{
printf("呵呵\n");//a为假,打印呵呵
}
if (a)
{
printf("呵呵\n");//a为真,打印呵呵
}
//printf("%d\n", !a);
return 0;
}
//-  --负值
#include<stdio.h>
int main()
{
int a = -5;
a = -a;
printf("%d\n", a);
}
//& --取地址操作符
#include<stdio.h>
int main()
{
int a = 10;
int* p = &a;
*p=20;//解引用操作符
printf("%d\n", a);
}
//sizeof 计算变量所占内存空间的大小,单位是字节
#include<stdio.h>
int main()
{
int a = 10;
char c = 'r';
char* p = &c;
int arr[10] = { 0 };
printf("%d\n", sizeof a);//4
printf("%d\n", sizeof(int));

printf("%d\n", sizeof(c));//1
printf("%d\n", sizeof(char));

printf("%d\n", sizeof(p));//4/8
printf("%d\n", sizeof(char*));

printf("%d\n", sizeof(arr));//40
printf("%d\n", sizeof(int[10]));//数组去掉数组名就是数组的类型
return 0;
}

注:数组是有类型的,数组去掉数组名就是数组的类型

标签:int,C语言,--,详解,操作符,includeint,printf,main
From: https://blog.51cto.com/u_15848198/5931567

相关文章