栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【编程之路(008)操作符详解】(C语言实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【编程之路(008)操作符详解】(C语言实现)

目录

操作符定义及其分类

算数操作符

移位操作符 

原码,反码,补码

左移操作符

 右移操作符

位操作符

按位与&

按位或|

按位异或^

赋值操作符

复合操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用操作符

函数调用操作符

访问结构成员操作符

操作符的属性


操作符定义及其分类

操作符定义:

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。

操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员

算数操作符 算数操作符都有:    +     -   *   /   % 对于 + - *没有什么可以讲的,但是对于剩下的三个需要注意以下问题: 1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。(5%2=2余1,返回值为1) 3. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 (在C语言中,整数的除法使用的相当于是去尾法,如5/2=2(把 小数点后面的都省略))


移位操作符  << 左移操作符 >> 右移操作符 注: 移的是整数的二进制位 移位操作符的操作数只能是整数。

原码,反码,补码

原码:可以简单的理解为我们直接通过一个数写出来的他的二进制形式。其中从左往右第1位是符             号位:正数为0,负数为1。

反码:符号位不变,其余位按位取反得到的就是反码。

补码:反码(最末尾(最右边的第一位))+1得到补码。

要想彻底搞懂这两个操作符,我先提出一个观念。我们在屏幕上看到的数字,暂且称其为表象;其在内存中存储的形式暂且称其为内象。

其中  正数:  表里如一。表象与内象都长得一样,言外之意就是原码,反码和补码都相同

          负数: 表里不一。我们看到的是它的原码,但它存储的形式是补码,我们需要计算得到。

 

左移操作符 移位规则: 左边抛弃、右边补0

 右移操作符 1. 逻辑移位 左边用 0 填充,右边丢弃 2. 算术移位(大多数编译器都是这样的) 左边用原该值的符号位填充,右边丢弃 具体的图就不画了。 需要特别注意的是 移位都是在补码上进行的,要特别注意负数。 移位后不改变原值。(如a=b>>2)这里的b的值是不改变的,只不过给a赋值的时候赋给的是移位后的值。

位操作符 位操作符都有: &      按位与 |      按位或 ^       按位异或 注: 与移位操作符一样,还是在 二进制位上进行操作。 他们的操作数必须是整数。

按位与&

规则如下:

0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1

例:

3 &5  即 011 & 101 =001 ,所以 3 & 5的值为1。

记忆时我们把0当假,1当真。把 & 当作数学上的 且 就方便记忆了。


按位或|

规则如下:

 0 | 0= 0 ,  1 | 0= 1  , 0 | 1= 1  ,  1 | 1= 1 

例:

2 | 4 即 010 | 100 = 110 ,所以2 | 4的值为 6 。

把 | 当作数学上的 或 方便记忆。


按位异或^

规则如下:

0 ^ 0=0  , 0 ^ 1= 1  , 1 ^ 0= 1  , 1 ^ 1= 0

例:

2 ^ 4 即 010 ^ 100 =110 ,所以 2 ^ 4 的值为6 。

口诀:相同为0,相异为1


赋值操作符

就是 = 没有什么需要特别注意的,但是要和 == 区分开来,== 是判断是否相等的。

复合操作符 +=   -=    *=    /=    %=    >>=    <<=    &=    |=    ^=
int a = 0
a += 1;
a = a + 1;
//二者完全等效,看个人习惯哪一种

单目操作符

单目操作符定义:

单目就是一个操作数,比如++,a++,操作数只有一个a

单目操作符分类:

!              逻辑反操作(在真前面加!就表示假) -              负值  +             正值 &             取地址 sizeof      操作数的类型长度(以字节为单位) ~             对一个数的二进制按位取反 --             前置、后置 --         (后置(a--)先使用变量a,在自减,自减后自身值减1) ++           前置、后置 ++     (前置(++a)先自增,自增后自身值加1,在使用变量a) *              间接访问操作符 ( 解引用操作符 ) ( 类型 )      强制类型转换     int a = (int)b = 1.0

关系操作符 > >= < <= !=   用于测试 “ 不相等 ” ==       用于测试 “ 相等 ”

逻辑操作符 &&        逻辑与    运算符两边的表达式的值都为true运算结果为true ,  其余情况为false 。 ||           逻辑或    运算符两边的表达式的值都为false运算结果为false ,  其余情况为true 。 另外当一个式子中出现多个逻辑与时 式子1&& 式子3&&式子3 从左往右,有一个式子为假就直接不往后进行判断
#include 
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %dnb = %dnc = %dnd = %dn", a, b, c, d);
	return 0;
}

另外当一个式子中出现多个逻辑或时 式子1|| 式子3||式子3 从左往右,有一个式子为真就直接不往后进行判断
#include 
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++||++b||d++;
	printf("a = %dnb = %dnc = %dnd = %dn", a, b, c, d);
	return 0;
}


条件操作符 exp1 ? exp2 : exp3 exp1是否为真?若真,执行exp2,否则执行exp3。

逗号表达式

逗号表达式的一般形式是:

表达式1,表达式2,表达式3……表达式n


 逗号表达式的求解过程是:

先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。

例如:
z=(x%y,x/y)  先计算x%y =1,再计算x/y=3,然后 z=(1,3)=3


下标引用操作符 [ ] 下标引用操作符 操作数:一个数组名 + 一个索引值 int arr [ 10 ]; // 创建数组 arr [ 9 ] = 10 ; // 实用下标引用操作符。 [ ] 的两个操作数是 arr 和 9 。

函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
#include 
void f1()
{
	printf("hehen");
}
void f2(const char* str)
{
	printf("%sn", str);
}
int main()
{
	f1(); //实用()作为函数调用操作符。
	f2("hello");//实用()作为函数调用操作符。
	return 0;
}

访问结构成员操作符 . 结构体 . 成员名 -> 结构体指针 -> 成员名
#include 
struct Stu
{
	char name[10];
	int age;
	char sex[5];
	double score;
};
void set_age1(struct Stu stu)
    {
		stu.age = 18;
	}
	void set_age2(struct Stu* pStu) {
		pStu->age = 18;//结构成员访问
	}
int main()
{
	struct Stu stu;
	struct Stu* pStu = &stu;//结构成员访问

	stu.age = 20;//结构成员访问
	set_age1(stu);

	pStu->age = 20;//结构成员访问
	set_age2(pStu);
	return 0;
}

操作符的属性 1. 操作符的优先级 2. 操作符的结合性 3. 是否控制求值顺序。

希望可以帮到你,有什么错误希望大家可以在评论区指出来。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号