C语言 操作符的用法和举例

目录

算数操作符

移位操作符(移动的是二进制位)

位操作符

关系操作符                                             

逻辑操作符

条件操作符(三目操作符)

逗号表达式 —— 逗号隔开的一串表达式

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


算数操作符

+    -    *    /      %

除号( / ) 两边如果都是整数,则执行的是整数除法,得到的值也是整数。

比如:int  a = 9/2; printf("%d\n",a), 得到的是 4,float a = 9/2; printf("%f\n",a), 得到的是4.000000。

除号两端( / )两边如果有一个小数,则执行的是小数除法,得到的也是小数。

比如:float a = 9/2.0;printf("%f\n",a),得到的是4.500000。

% —— 取模,也叫取余,int  a = 9/2; printf("%d\n",a), 得到的是余数 1

移位操作符(移动的是二进制位)

>> (右移)     << (左移:左边丢弃,右边补0)

左移举例: 

位操作符

& 按位与

|  按位或

^ 按位异或

赋值操作符

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

#include<stdio.h>

int main(void)
{
	int a = 2;
	a += 5;     // 这叫复合赋值,也可以写成 a = a + 5

	printf("%d\n", a);  //输出 7
	return 0;
}

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

a + b:    + 两边有2个操作数,叫双目操作符

逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制取反。把所有二进制位中的数字,1变0,0变1
--前置、后置--
++前置、后置++
*间接访问操作符(解引用操作符)查看用法
(类型)强制类型转换

 !操作符举例:

#include<stdio.h>
int main(void)
{
	//0 表示假,非0表示真
	int a = 10;

	printf("%d\n", !a);  //!是取反的意思,a = 10为真, !a为假,输出0
	return 0;
}
#include<stdio.h>
int main(void)
{
	//0 表示假,非0表示真
	int a = 0;

	printf("%d\n", !a);  //!是取反的意思,a = 0为假, !a为真,输出1
	
	if (a)
	{
		//如果a为真,做事
	}
	if (!a)
	{
		//如果a为假,做事
	}
	
	return 0;
}

sizeof 举例:

sizeof 是一个操作符
计算类型或者变量大小的,也可以计算数组大小
sizeof 求变量的时候后面的括号可以省略,求类型的时候括号不可以省略,通常都不要省略
函数后面跟的括号无论如何是不可以省略的,所以sizeof是操作符不是函数

#include<stdio.h>
int main(void)
{
	//sizeof 是一个操作符
	//计算类型或者变量大小的
	//sizeof 求变量的时候后面的括号可以省略,求类型的时候括号不可以省略
	//函数后面跟的括号无论如何是不可以省略的,所以sizeof是操作符不是函数
	int a = 10;

	printf("%d\n", sizeof(int));   //输出 4
	printf("%d\n", sizeof a);     //输出 4

	return 0;
}
#include<stdio.h>
int main(void)
{
	
	int arr[10] = { 0 };   // 10个元素,每个元素都是一个整型int

	printf("%d\n", sizeof(arr));  //输出 40 //计算的是数组的总大小,单位是字节,输出的是 10*4 = 40
	
	printf("%d\n", sizeof(arr[0]));     //求第一个元素的大小,输出 4
	
	int sz = sizeof(arr) / sizeof(arr[0]);   //计算一个数组的元素个数
	printf("%d\n", sz);     //输出 10

	return 0;
}

~  操作符举例: 

#include<stdio.h>
int main(void)
{
	int a = 0;
	printf("%d\n", ~a);   // 输出-1  // ~ 按(二进制)位取反

	return 0;
}

整数在内存中储存的是 补码

一个整数的二进制表示有3种:原码  反码   补码

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

负整数:
原码

反码:原码的符号位不变,其余按位取反

补码:反码 + 1

--  ++ 操作符举例:

前置++ —— 运算规则:先++,后使用

#include<stdio.h>
int main(void)
{
	int a = 10;
	int b = ++a;    //前置++ 运算规则:先++,后使用
	printf("%d\n", b);   // 输出11 
	printf("%d\n", a);   // 输出11 因为 b = ++a 是先让 a = 11,再 b = a

	return 0;
}

 后置++  —— 运算规则:先使用,后++

#include<stdio.h>
int main(void)
{
	int a = 10;
	int b = a++;    //后置++ 运算规则:先使用,后++
	printf("%d\n", b);   // 输出10 
	printf("%d\n", a);   // 输出11 因为 b = a++ 是先让 b = 10,再 a = 11

	return 0;
}
#include<stdio.h>
int main(void)
{
	int a = 10;
	int b = (++a) + (++a)+ (++a);   //不建议研究这种代码,一般不会这样写
	
	printf("%d\n", b);  //输出39

	return 0;
}

int a = 10;
int b = (++a) + (++a)+ (++a);

可以理解为      ++a   第一次   10 +1 =11

                        ++a    第二次   11 + 1 =12

                        ++a    第三次   12 + 1 =13

                         所以运算过后的 a = 13

因为 前置++ 的运算规则是:先++,后使用,所以 int b = (++a) + (++a)+ (++a)= 13 +13 + 13 = 39

(类型)举例:   

对下面代码进行编译的时候,会跳出警告warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data  提示将double类型转换为int类型可能会丢失数据(丢失精度)

#include<stdio.h>
int main(void)
{
	int a = 3.14;

	printf("%d\n", a);  

	return 0;
}

   如果不想看到这个警告,可以使用 强制类型转换 如下:                     

#include<stdio.h>
int main(void)
{
	int a = (int)3.14;   //强制类型转换

	printf("%d\n", a);  
	return 0;
}

关系操作符                                             

>    >=     <      <=     !=  (用于测试“不相等”)     == (用于测试“相等”)   

逻辑操作符

&&    逻辑与

#include<stdio.h>
int main(void)
{
	int a = 3;
	int b = 5;
	int c = a && b;

	printf("%d\n", c);   //a和b都为真,c为真,输出 1
	return 0;
}

| |      逻辑或

#include<stdio.h>
int main(void)
{
	int a = 3;
	int b = 0;
	int c = a || b;

	printf("%d\n", c);   //a为真,b为假,c为真,输出 1
	return 0;
}

条件操作符(三目操作符)

exp1 ?  exp2  :  exp3

exp1 成立,exp2计算,整数表达式的结果是:exp2的结果

exp1 不成立,exp3计算,整数表达式的结果是:exp3的结果

比如:

#include<stdio.h>
int main(void)
{
	int a = 0;
	int b = 3;
	int max = 0;

	if (a > b)
		max = a;
	else
		max = b;

	printf("%d\n", max);   //输出 3
	return 0;
}

用条件操作符表达如下:

#include<stdio.h>
int main(void)
{
	int a = 0;
	int b = 3;
	int max = 0;
	max = a > b ? a : b;   //如果a>b,则输出a,否则输出b

	printf("%d\n", max);  // 输出3 
	return 0;
}

逗号表达式 —— 逗号隔开的一串表达式

exp1, exp2, exp3, ……expN

逗号表达式是从左向右依次计算的,整个表达式的结果是最后一个表达式的结果

比如 y = (35, 45), 实际是把45赋值给了y,即 y = 45

#include<stdio.h>
int main(void)
{
	int a = 2;
	int b = 3;
	int c = 5;
    //逗号表达式是从左向右依次计算的
    //整个表达式的结果是最后一个表达式的结果
	
    int d = (a = b + 3, b = a - 2, c = a + b);  //a = 6, b = 4,c = 10

	printf("%d\n", d);  // 输出10
	return 0;
}

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

[ ]     ( )     .     ->    (. ->用法在这篇文章,点击这里)

[ ]  和  ( ) 举例:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值