C语言之操作符

算术操作符:

+(加)       -(减)        *(乘)         /(除)              %(取模,取余数)

以下代码讲下除以和取模:

#include<stdio.h>
int main()
{
	int a = 5 / 2; //除以=商,结果2
	int b = 5 % 2;//取模得到的是余数,1
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

位移操作符:

>> (右移)         <<(左移)

移位操作符取得是2进制位,代码如下:

#include<stdio.h>
int main()
{
	//移(2进制)位操作符
	//<<左移操作符  >>右移位操作符
	int a = 1;
	//整型1占4个字节=32bit 位
	//1的2进制序列是怎么表达的  01
	//00000000 00000000 00000000 00000001
	int b=a << 1;//a向左移1 
	//00000000 00000000 00000000 00000010(左边丢弃,右边补0)
	printf("%d\n", b);            //变成了10, 10这个2进制序列如果翻译成十进制序列的话:1x2的一次方  结果就是2
	printf("%d\n", a);//此时的a没变还是原来的1,当对a左移右移操作时,a是不变的,除非移完后赋给a

	//假设左移2位,00000000 00000000 00000000 00000100    1x2的2次方  结果4

	return 0;
}

逻辑操作符

位操作符:

(2进制)位操作

&(按位与)     |(按位或)     ^(按位异或)

&(按位与)以下代码:

#include<stdio.h>
int main()
{
	//(2进制)位操作
	// &(按位与)与是并且的意思
	// | (按位或)
	// ^ (按位异或)
	int a = 3;   //  a b (2进制)位操作
	int b = 5;   //  3 5 转换的2进制是 011   101
	int c = a & b; //2进制怎么转化呢? :假设1111: 二进制:    1              1             1               1
	//011(在c中0代表假,非0为真)
	//101 (这是3和5的二进制,竖着看01为假  10 为假  11为真)
	//001  
	//1(a&b结果是1)
	printf("%d\n", c); //                                     1*2^3          1*2^2         1*2^1           1*2^0                     
	                   //    
	                    //                                      8              4            2                 1
	
	return 0;         //3 和 5 看假设里2+1,4+1          3:     0              0            1                 1
	                  //                                5:     0              1            0                 1
	                  //                         假设  13:     1              1            0                 1
}                     //                         假设  100:   需要更大的,前面加上1*2^4

  | (按位或)以下代码:

#include<stdio.h>
int main()
{
	//(2进制)位操作
	// &(按位与)与是并且的意思
	// | (按位或)
	// ^ (按位异或)
	int a = 3;   //  a b (2进制)位操作
	int b = 5;   //  3 5 转换的2进制是 011   101
	int c = a | b; //2进制怎么转化呢? :假设1111: 二进制:    1              1             1               1
	//011(在c中0代表假,非0为真)
	//101 (这是3和5的二进制,竖着看01为假  10 为假  11为真)
	//111  (按位或)只要有一个真的 就是真的。
	//7(a|b结果是7)
	printf("%d\n", c); //                                     1*2^3          1*2^2         1*2^1           1*2^0                     
	                   //    
	                    //                                      8              4            2                 1
	
	return 0;         //3 和 5 看假设里2+1,4+1          3:     0              0            1                 1
	                  //                                5:     0              1            0                 1
	                  //                         假设  13:     1              1            0                 1
}                     //                         假设  100:   需要更大的,前面加上1*2^4

^(按位异或)以下代码:


#include<stdio.h>
int main()
{
	//(2进制)位操作
	// &(按位与)与是并且的意思
	// | (按位或)
	// ^ (按位异或) //不是次方 --是异或
	//异或的计算规律:
	//对应的二进制位相同,则为0
	//对应的二进制位相异,则为1

	int a = 3;   //  a b (2进制)位操作
	int b = 5;   //  3 5 转换的2进制是 011   101
	int c = a ^ b; //2进制怎么转化呢? :假设1111: 二进制:    1              1             1               1
	//011   (在c中0代表假,非0为真)
	//101   (这是3和5的二进制,竖着看01为假  10 为假  11为真)
	//110    (按位异或)
	//6(a^b结果是6)
	printf("%d\n", c); //                                     1*2^3          1*2^2         1*2^1           1*2^0                     
	                   //    
	                    //                                      8              4            2                 1
	
	return 0;         //3 和 5 看假设里2+1,4+1          3:     0              0            1                 1
	                  //                                5:     0              1            0                 1
	                  //                         假设  13:     1              1            0                 1
}                     //                         假设  100:   需要更大的,前面加上1*2^4

//

赋值操作符:

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


#include<stdio.h>
int main()
{
	int a = 10;
	a = 20;  // = 就是赋值    == 就是判断相等
	a = a + 10;//1   1和2这俩中写法完全等价
	a += 10;  //2

	a = a - 20;
	a -= 20;

	a = a & 2;
	a &= 2;
	//这些操作符叫复合赋值符
	//=   +=  -=  *=   /=   &=   ^=   |=   >>=   <<=
	return 0;
}

单目操作符:

!           逻辑反操作

-          负值

+         正值

&        取地址

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

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

--        前置  后置--

++       前置  后置++

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

(类型)     强制类型转换

#include<stdio.h>
int main()
{
	int a = 9;
	int b = ++a;  //先++,后使用
	printf("a=%d,b=%d\n", a, b);
	//a=10,b=10
	return 0;

	}
	
#include<stdio.h>
int main()
{
	int a = 9;
	int b = a++;  //先使用,后++
	printf("a=%d,b=%d\n", a, b);
	//a=10,b=9
	return 0;

	}
	

(类型)     强制类型转换

#include<stdio.h>
int main()
{

	int a = (int)3.14;
	printf("%d\n", a);  //对3.14进行了强制类型转换,不会进行不必要的报错
	return 0;

	}
#include<stdio.h>
int main()
{

	int a= 10;
	if (a >= 10)
	{
		printf("hehe\n");
	}
	return 0;
	}
#include<stdio.h>
int main()
{

	int a= 10;
	if (10 == a)//建议反着写
  //if (a == a)
	{
		printf("hehe\n");
	}
	return 0;
	}

一个  =   代表赋值,俩个  ==  代表判断相等

关系操作符

 

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

C语言中唯一三目操作符

exp1?exp2:exp3

若表达式exp1为真则计算exp2

若表达式exp1为假则计算exp3

#include<stdio.h>
int main()
{

	//单目操作符
	//双目操作符
	//三目操作符
	//int a = 10;
	//int b = 20;
	//a + b;   //  +双目操作符 它有俩个操作数

	//c语言中我们要表示真假,0为假,非0为真
	//
	int a = 10;

	printf("%d\n", a); //a就是10    真
	printf("%d\n", !a); // !逻辑反操作, 把它变为假,为0
	return 0;
}

例如:找出一个较大的数进行输出

int main()
{

	int a = 3;
	int b = 5;
	int m = 0;
	m = ((a > b) ? (a) : (b));

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

-          负值

+         正值

代码如下:

#include<stdio.h>
int main()
{

	int a = -2;
	int b = -a;

	int c = +3; //+正号都会省略
 
	return 0;
}

sizeof      操作数的类型长度(以字节为单位) 代码如下:


#include<stdio.h>

int main()
{
	int arr[10] = { 0 };//10个整型元素的数组
	int sz = 0;
	//10*sizeof(int)=40
	printf("%d\n", sizeof(arr));
	//计算数组的元素个数
	//数组总大小/每个元素的大小 =个数
	sz =sizeof(arr) / sizeof(arr[0]);
	printf("sz=%d\n", sz);
	/*int a = 10;*/
	//sizeof 计算的是变量 / 类型所占空间的大小,单位是字节,a占4个字节。
	//printf("%d\n", sizeof(a));//4
	//printf("%d\n", sizeof(int));//4
	//printf("%d\n", sizeof  a);  //4
	//printf("%d\n", sizeof  int);int 不加括号错误。

	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值