【C语言】入门——操作符

目录

操作符分类

1.算数操作符:

 2.移位操作符:

2.1左移操作符:

 2.2右移操作符:

 二进制的三种形式

原码和补码 

3.位操作符:

 3.1按位与&:

 3.2按位或|:

 3.3按位异或^:

 4.赋值操作符:

5.单目操作符:

6.关系操作符:

 7.逻辑操作符:

8.条件操作符

 9.逗号表达式

 10.下标引用,函数调用,和结果成员


操作符分类

C语言中操作符总共有10种:

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

1.算数操作符:

+        -        *        /        % 

 注意:/和%,不同,/是得到商,%是得到余数

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

 2.对于 / 操作符如果两个操作数都为整数,执行整数除法。

3.而只要有浮点数执行的就是浮点数除法。

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


int main()
{
	int a = 0;
	a = 13 % 5;//读作13取模5
	printf("%d", a);//3
	return 0;
}

 2.移位操作符:

<<        >>

 因为元素在内存中是以二进制存储的,移的位都是二进制位,先把元素转换成二进制数。

int a = 10;
	//二进制
	//00000000000000000000000000001010

 注:移位操作符的操作数只能是整数

2.1左移操作符:

(整数在内存中存储的时补码的二进制序列)

在计算也是用的补码计算。

打印出来是按照原码打印显

左边丢弃,右边补0

int a = 10;
		int b = 0;
		b = a << 1;//左移一位
		printf("%d\n", b);		//20
		printf("%d\n", a);			//10
		//00001010
	//->  00010100

 2.2右移操作符:

分为两种方式:(根据不同编译器决定,大多数是2)

1.逻辑右移:右边直接丢弃,左边补0(不怎么用,有缺陷)

2.算术右移:右边直接丢弃,左边补原数值符号位

原来是负数,左边补1;

原来是正数,左边补0;

注:(对于移位运算符,不能移动负数位

int num = 10;

num >> -1; 错误的)

 二进制的三种形式

移位操作跟二进制相关,整数的二进制分为三种

①原码:按照数值的正负,直接写出的二进制序列就是原码。

②反码:原码的符号位不变,其他位按位取反。

③补码:反码的二进制+1就得到补码

比如:10:

原码:00000000000000000000000000001010

反码:00000000000000000000000000001010

补码:00000000000000000000000000001010

-10:

原码:10000000000000000000000000001010

反码:111111111111111111111111111111110101

补码:111111111111111111111111111111110110

对于一个整数是4个字节=32个bit位

一个整数写出二进制序列时,就是32个bit位。

对于有符号的整数来说,最高位的1位时符号位

符号位1表示负数

符号位0表示整数

对于无符号位数整数来说,没有符号位,所有位都是有效位

正的整数,反码,补码相同,无需计算

原码和补码 

原码可以通过取反,+1操作得到补码,补码也可以通过取反+1得到原码

3.位操作符:

&        |        ^ 

&: //按位与 :只有两个数的二进制同时为1,结果才为1,否则为0。

&1可以得到该二进制最后一位是0还是1

|: //按位或 两个数有一个为1,则为1.全0才是0

^: //按位异或  如果其中一个操作数中的位为 0,而另一个操作数中的位为 1,则相应的结果位设 置为 1。 否则,将对应的结果位设置为 0。相同为0,不同为1 a^a =0;0^5 =5;(支持交换律)

按位异或 ^ 是一种二进制运算符,它将两个数的每一位进行异或操作。异或运算的规则是:如果两个对应位的数相同,则该位结果为0;如果两个对应位的数不同,则该位结果为1。异或运算有以下几个特点:

  1. 0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,这是异或运算的基本规则。
  2. 0异或任何数等于任何数本身,即0 ^ x = x。
  3. 1异或任何数等于该数的取反,即1 ^ x = ~x。
  4. 任何数异或自己等于0,即x ^ x = 0。

注:操作数必须是整数

 3.1按位与&:


	int a = 3;
	int b = 5;
	int c = 0;
	c = a & b;//按(2进制位)位与
	//规则:对应位都是1,按位与为1。对应位有一个不是1,那按位与为0
	//a:00000000000000000000000000000011
	//b:00000000000000000000000000000101
  //a&b:00000000000000000000000000000001

 3.2按位或|:


	int a = 3;
	int b = 5;
	int c = 0;
	c = a | b;
	//对应位只要有一个1,那么就按位或该位置为1
	//a:00000000000000000000000000000011
	//b:00000000000000000000000000000101
  //a|b:00000000000000000000000000000111

 3.3按位异或^:


	int a = 3;
	int b = 5;
	int c = 0;
	c = a ^ b;
	//对应位,相同为0,相异为1
	//a:00000000000000000000000000000011
	//b:00000000000000000000000000000101
  //a|b:00000000000000000000000000000110

 4.赋值操作符:

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

就是简单的将想要的值赋给另一个变量;复合赋值也只是为了简洁;

5.单目操作符:

!        逻辑反操作

-           负值

+           正值

&           取地址

sizeof      操作数的类型长度(以字节为单位)

~           对一个数的二进制按位取反

--           前置、后置--

++          前置、后置++ *          

*              间接访问操作符(解引用操作符)

(类型)        强制类型转换

重点在于sizeof :

sizeof是在计算类型创建变量或者变量的大小,单位是字节

                计算的结果是size_t类型的;

                size_t 是无符号整型的,所以sizeof也是无符号的;

               对size_t类型的数据进行打印,可以使用%zd;

                sizeof是操作符,不是函数

sizeof:只在乎数组里面有多少个字符元素,来计算数组大小;

              计算的占用内存的大小,无论对象啥类型;

strlen:遇到\0才算结束计算;

               是库函数,统计字符串长度的;

                只能针对字符串;

int main()
{
	int a = 5;
	printf("%d", sizeof(a));//计算int类型的长度
	return 0;
}

 强制类型转换也是常用的之一


	int a = (int)3.14;//将double类型强制转换为整型
	printf("%d\n", a);

6.关系操作符:

>         大于

>=       大于或等于       

<         小于       

<=       小于或等于       

!=        不等于       

==        等于

 特别注意“==”和“=”不一样

 7.逻辑操作符:

&&:    逻辑与      

||:        逻辑或

 &&:只有&&两边的表达式均为真,才表示真

||:   只要||一边的表达式为真,整个表达式就为真

注:要区分逻辑与  和 按位与

                 区分逻辑或和按位或

8.条件操作符

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

如果表达式1成立,则执行表达式2的值,否则执行表达式3的值 

int a = 3;
	int b = 5;
	int max = (a > b ? a : b);//用来找到两数的较大值
	printf("%d\n", max);

 9.逗号表达式

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

 表达式的结果:从左向右依次执行,整个表达式的值是最后一个表达式的结果


	int a = 3;
	int b = 5;
	int c = (a + b, b + 1, a++);//最后一个表达式的值
	printf("%d\n", c);//3

 10.下标引用,函数调用,和结果成员

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

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

3. 访问一个结构的成员 . 结构体.成员名 -> 结构体指针->成员名

感谢你看到这里,身为初学者,自知有很多不足,望得到指点!!! 

你可能感兴趣的:(【C】,c语言,开发语言,学习,程序人生)