C语言操作符详解(1)
C语言的操作符是代码编写过程中必不可少的部分,下面给大家介绍一下C语言的几种操作符。(1)算术操作符
算术操作符有: + 、 - 、* 、 / 、% ,对于这些符号,相信大家都比较了解,这里简单的介绍一下 / 跟 %。
/ 是得出两个数相除之后的取值,% 是得出两个数相除之后余下的值。
(2)位移操作符
位移操作符有:>> 、 << ;位移操作符是将一个数的二进制编码整个向左或向右移动,移动的位数取决于位移操作符后跟随的数值大小。
(3)位操作符
位操作符有 & 、^ 、| ;这里学过java的同学注意了,C语言里的 & 跟 | 并不是直接比对两个数值或函数的真或假,而是比对一个数值的二进制编码逐位进行真假运算。
&是与运算,当两个数都为真时,结果才为真。
| 是或运算,只要有一个为真,结果就为真。
^ 是异或运算,只有一个为真,一个为假时,结果才为真。
(4)赋值操作符
赋值操作符有:= 、+= 、-= 、*= 、/= 、&= 、^= 、|= 、>>= 、 <<= ;
在C语言里 = 是赋值语句,把一个数值赋值给一个变量,通过观察我们可以看出,这些符号每个后面都跟着一个 = ,前面是一个运算操作符,意思是把变量自身跟赋值的数值进行前面运算操作符的操作后得出的值,赋值给他本身,这里可能有点拗口,下面举一些例子来帮同学们理解一下。
先举例大家比较熟悉的 += 、-= 来帮助大家理解。
观看完上面两个案例,如果同学们有了简单的认识,让我们用一个我们上面讲到过的 &= 来举个例子,大家可以借此复习一下前面讲过的与运算操作符 & 。
好,经过这几个案例的介绍,相信大家对于赋值操作符也有了简单的认识,这里就不在过多介绍,剩下的赋值操作符,就留给同学们自己去实操一下。
(5)单目操作符
单目操作符有:! 、- 、+ 、& 、sizeof 、~ 、-- 、++ 、* 、();
!是一个逻辑反操作运算符,他的效果是把真变为假,把假变为真。
+ 跟 - 都是符号操作符,把数值的符号更改为 + 或者 - 。
& 跟 * 是一对配对的符号,都是针对内存地址的符号,这里的 & 跟上面为操作符的 & 是同一个符号,但因为使用的方式不同,所以有各自不同的效果,需要同学们注意一下。
& 是取地址操作符,在C语言创建一个变量的时候,在内存里都会开辟一个空间来给那个变量存储内容,每一个内存都有一个地址,而 & 符号,就是提取出一个变量的地址,而提取出的地址要保存到哪里呢,这里我们要引出一个指针变量的概念。
像这个例子里面的 p 变量就是一个指针变量,p 是他的变量名,int是他地址里存放数据的类型,这里a是int类型的,所以指针变量的类型就是int*,这里的*只是为了让人们知道他是一个指针变量,与我们后面要讲到的*并不相同,同学们要注意一下。
而我们保存了一个地址,初衷是不是为了以后想要使用这个数据时,能通过这个地址去找到里面的数据。而怎么通过地址找到他里面的数据呢,这就是我们下面要讲到的 * 。
* 也叫做反引用操作符,他的作用就是可以通过保存的地,找到他里面的数据。
sizeof 是计算变量内存空间大小的操作符。
这里a的大小为什么是4呢,因为他是一个int类型的变量,而int类型的变量大小就是4。
~ 操作符是对一个数的二进制位按位取反。
这里有的同学就会有疑问了,不是说是对数的二进制位进行按位取反吗,那3的二进制位是 00000000000000000000000000000011 ,那按位取反后不应该是 11111111111111111111111111111100 吗,怎么得出的数值是 -4,这里我们需要引入 原码 、反码 、补码的概念,如果学过这个概念的同学,应该会比较好理解一点,我们的数值在保存的时候,保存的都是数值的补码,而我们输出的,却是数值的原码,也就是说,按位取反后的二进制位编码,其实是b的补码,我们需要给转换成原码,才是最终输出的结果,而怎么从补码转换成原码呢,他们的转换规制是,补码 - 1 = 反码 ,反码最高位不变,其余按位取反 = 原码。
所以 11111111111111111111111111111100 - 1 变成 11111111111111111111111111111011 ,这是反码,最高位不变,其余按位取反,变成 10000000000000000000000000000100 这才是我们最终输出的原码,有同学就会问了,这个二进制位编码结果也不是-4啊,怎么结果是 -4 ,其实,这是因为,在C语言里,二进制编码的最高位,相当于数值的符号,为 1 相当于数值的符号为 负,为 0 相当于数值的编号为正。所以,最终输出的数值大小为 -4 ;
-- 跟 ++ 的运算规制是一样的,所以我们指举例 ++ 。++ 是让数值自加1的意思,同理,-- 是让数值自减1 ,但所放位置的不同,运行的效果也不相同。
明明都是++,为什么两次运行的结果会不相同呢,其实这是++ , -- 的运算规制,++在前,表明这个数值是先自加,后执行,++在后表明他是先运行,后自加,同学们要记住这点。
()是强制类型转换的符号,当我们要把数值从高精度转换为低精度时,系统通常会报错,因为从高精度转换为低精度时,会损失一部分数据,而但我们想要他转换类型时,又不想他报错,加上个(),就能完美解决。
文档来源:51CTO技术博客https://blog.51cto.com/u_15322832/3314001
页:
[1]