标签搜索

目 录CONTENT

文章目录

操作符详解.md

小小城
2021-08-22 / 0 评论 / 0 点赞 / 6 阅读 / 1,802 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

操作符和表达式

@[toc]

一、操作符:

  •  算数操符:+、-、*、/、%

  • 其中除了%外的操作都可以作用于整数和浮点数,%超作符的两个操作数必须为整数

  •  移位操作符:(不要移动的位数为负数)

  • >>为右移操作符:(相当于除2 ^ i)

(1)逻辑位移:左边用0补充,右边丢弃
(2)算数移位:左边补符号位,右边丢弃
  • <<为左移操作符:(相当于乘2 ^ i)
    左边丢弃,右边补0;

  •  位操作符:

  • (1)& 按位与

  • (2 )| 按位或

  • (3) ^ 按位异或 (注:他们的操作数必须是整数。)

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

#include <stdio.h>
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;
}

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

//方法1
#include <stdio.h>
int main()
{
	int num = 10;
	int count= 0;//计数 
	while(num)
	{
        if(num%2 == 1)
        	count++;
        num = num / 2;
	}
	printf("二进制中1的个数 = %d\n", count);
 	return 0;
}

//方法2:
#include <stdio.h>
int main()
{
	int num = -1;
	int i = 0;
	int count = 0;//计数 
	for(i = 0; i < 32; i++) 
	{
        if(((num>>i) & 1) == 1 )
            count++;
	}
	printf("二进制中1的个数 = %d\n",count); 
	return 0;
}

//方法3:
#include <stdio.h> 
int main()
{
	int num = -1;
	int i = 0;
	int count = 0;//计数 
	while(num)
	{
		count++;
        num = num&(num-1);
    }
	printf("二进制中1的个数 = %d\n",count);
	return 0;
 }
  •  赋值操作符及复合赋值符

    =、+=、-=、*=、/=、%=等

  •  单目操作符

逻辑取反
-负值
+正值
&取地址
----
sizeof求操作数的长度
按位取反
----
--、++自减、自增
*解引用
----
(类型)强制转换

其中sizeof为一个关键字,求长度时在编译期间确定大小,并不参与运算, 若sizeof(数组)则代表整个数组的字节大小。

  •  关系操作符
>
>=
<
<=
!= 用于测试“不相等” == 用于测试“相等”
  •  逻辑操作符
  • && 逻辑与
  • || 逻辑或

例:

1 & 2----->0
1 && 2---->1
1 | 2----->3
1 || 2---->1

例:

#include <stdio.h>
int main() 
{
    int i = 0,a = 0,b = 2,c = 3,d = 4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

注意!!!进行&&运算时:遇到0便停止后续运算
进行||运算时:遇到1便停止后续运算

  •  条件操作符

  • 表达式1 ?表达式2 : 表达式3

 a>b:?a:b等价于
              
if(a>b)
{
     return a;
}
else
{
     return b;
}

二.表达式

  •  逗号表达式:表达式1,表达式2,……表达式N

  • 多个表达式用逗号隔开,从左往右依次计算,整个表达式的结果由最后一个表达式的结果决定

  •  下标引用、函数调用、结构成员

  • (1)[] : 下标应用操作符[](注意在指针中该操作符自带解引用功能)

  • (2) () :函数调用操作符

  • (3). : 结构体变量.成员 名。

  • (4) ->: 结构体指针->成员名

  •  表达式求值

  • 由操作符优先级和结合性决定,其中,C中终始一缺省整形类型的精度来进行的,为了获得这个精度,表达式中字符和短整型操作数在使用前都被转化为普通整形,即整形提升(正数高位补0负数高位补1)。

0

评论区