C语言 操作符

目录

一、操作符分类

二、算术操作符

三、移位操作符 

整数的二进制的表示形式:

原码、反码、补码之间的转换

 三、位操作符

 1.  &   按位与

例:求一个整数存储在内存中二进制位的个数 

 2. |   按位或

3.  ^   按位异或 

 例:不用临时变量,交换两个整数

四、赋值操作符

五、单目操作符

 1. !    逻辑反操作符

 2. &   取地址操作符     *   解引用操作符

3.sizeof 

5.强制类型转换 

六、关系操作符

七、逻辑操作符

八、条件操作符

九、逗号操作符

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

1. [ ] 下标引用操作符

2. ( ) 函数调用操作符

3. 访问一个结构的成员


一、操作符分类

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

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

二、算术操作符

      ‘+’           ‘-’           ‘*’           ‘/’           ‘%’

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

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

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

三、移位操作符 

>>        右移操作符

<<        左移操作符

注意:移位操作符的操作数只能是整数   移动的是二进制位

整数的二进制的表示形式:

原码        反码        补码

根据正负直接写出的二进制序列就是原码

一个整型是四个字节,也就是32bit    所以在写二进制时要写32位 

最高位是符号位:

符号位是1表示负数

符号位是0表示正数

例如:

5

00000000   00000000   00000000   00000101

-15

10000000   00000000   00000000   00001111

原码、反码、补码之间的转换

1.正整数:

        正整数的原码、反码、补码是相同的

2.负整数

        (1).先根据十进制写出二进制序列        -- 原码

        (2).符号位不变,其它位按位取反        -- 反码

        (3).反码加一就是补码                          -- 补码

 整数在内存中存储的是补码,计算的时候也是使用补码计算的

右移    --   >>

1.算术右移:右边丢弃,左边补原来的符号位

2.逻辑右移:右边丢弃,左边直接补0

注意:C语言没有明确规定是算术右移还是逻辑右移,一般编译器采用的是算术右移

int main()
{
    int a=0;
    int b=a>>1;
}

左移    --   <<

左边丢弃,右边补0

 三、位操作符

&          按位与

|           按位或

^          按位异或

注:他们的操作数必须是整数

 1.  &   按位与

例:求一个整数存储在内存中二进制位的个数 

1.获得整数32个bit的每一位

2.判断每位是否是1

3.是1计数器+1

整数 & 1 就可以获得整数的最低位

 

 2. |   按位或

3.  ^   按位异或 

 例:不用临时变量,交换两个整数

a ^ a = 0;
//00000000000000000000000000000101
//00000000000000000000000000000101
//00000000000000000000000000000000 

a ^ 0 = a;
//00000000000000000000000000000101
//00000000000000000000000000000000 
//00000000000000000000000000000101

四、赋值操作符

简单赋值符    --    =          

==是判断是否相等

赋值操作符可以连续使用,比如:

int a = 10;

int x = 0;

int y = 20;

a = x = y+1 ;

注意:我们要尽量少使用连续赋值,这样的代码可读性不高,分开写我们可以一步一步观察细节 

符合赋值符      += 、 -= 、 *= 、 %= 、 >>= 、 <<= 、 &= 、 |= 、 ^=

例如:

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁

五、单目操作符

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

!          --逻辑反操作

 -           --负值

 +          --正值

&           --取地址

sizeof     --操作数的类型长度(单位:字节)

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

--            --前置、后置--

++          --前置、后置++

 *            --解引用操作符

(类型)  --强制类型转换
 

 1. !    逻辑反操作符

 2. &   取地址操作符     *   解引用操作符

 

 pa中存放的是地址

	*pa = 20;    //解引用操作符--通过pa中存放的地址,找到指向的空间(内容)

3.sizeof 

说明:sizeof  --  不是函数,是操作符

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

 4. ~   按位取反

int main()
{
    int a=0;
    //scanf  读取失败返回的EOF  --   -1
    //-1  按位取反后是 0
   
    while(~scanf("%d",&a))
    {
        printf("%d",a);
    }
    return 0;
}



int main()
{
    int a=0;
    while(scanf("%d",&a)!=EOF)
    {
        printf("%d",a);
    }
    return 0;
}

5.强制类型转换 

int main()
{
    int a=(int)3.14;
}

六、关系操作符

 >

 >=

 < 

 <=

 !=               用于测试不相等

 ==              用于测试相等

七、逻辑操作符

&&-- 逻辑与       左边为假,后边就不用算了

|  |-- 逻辑或        左边为真,后边就不用算了

八、条件操作符

exp1?exp2:exp3

若表达式1为真,则返回表达式2;若为假则返回表达式3 

 例如:求两个数的最大值

//通常我们会用if语句来判断
#include <stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	if (a > b)
	{
		printf("max=%d\n", a);
	}
	else
	{
		printf("max=%d\n", b);
	}
	return 0;
}




//使用条件操作符
int main()
{
	int a = 3;
	int b = 5;
	int max = (a > b ? a : b);
    printf("max=%d",max);
	return 0;
}

九、逗号操作符

exp1,exp2,exp3……,expn

 逗号表达式,就是用逗号隔开的多个表达式。

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

 

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

1. [ ] 下标引用操作符

操作数:一个数组名 + 一个索引值

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

2. ( ) 函数调用操作符

int c = Add(3 ,5);
()的操作数是Add 3 5

对于函数操作符,最少有一个操作数

3. 访问一个结构的成员

. 结构体.成员名

-> 结构体指针->成员名

猜你喜欢

转载自blog.csdn.net/2301_76207836/article/details/130634321