位操作符和单目操作符

一、位操作符

1.1 &(按位与操作符)

按位操作符表示两个整数对应的二进制位全部为1才为1,有一个为0就为0;
例如:

5&15
5转换为二进制     0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 1 0 1
15的二进制          0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 1 1 1 1
5&15的二进制      0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 1 0 1
所以5&15 = 5

其实我们也可以把他类似的看作逻辑&&操作符,如果两个条件都成立则返回1,有1个或1个以上都不成立,而当条件为1是就是真,当条件为假时就为0

1.2 |(按位或操作符)

按位或 操作符表示只要对应的二进制位有1,那么 | 后的结果就是1
例如:

5:       0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 1 0 1
15:     0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 1 1 1 1
5 | 15:0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 1 1 1 1
所以 5 |  15  =  15

同样的,我们也可以把他类似的看作 ||,只要其中一个条件成立,就返回1

1.3 ^ (按位异或操作符)

按位异或操作符表示不同为1,相异为0
例如:

5:       C
15:      0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 1 1 1 1
5^15      0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 1 0 1 0
所以,5^15 = 10

1.4 ~ (按位取反操作符)

按位取反操作符 表示把一个数的二进制按位取反,也就是0变成1,1变成0
例如:

5:      0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 1 0 1
~a:    1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 0 1 0
按位取反后,符号位变成了1,我们都知道负数在存储的时候是补码,所以还需要把补码转换为原码
1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0 0 0 0 0 1 1 0
所以~a = -6

二、单目操作符

单目操作符的特点是只有一个操作数

2.1 !(非操作符)

非操作符一般用于布尔表达式当中,将布尔表达式的值取反,即假变成真,真变成假
就比如:a>b已经成立,返回真(非0),如果加上!(a>b),那么这个表达式返回的值就会假(0)

2.2 ++、–

++是自增操作符,用于将整数本身的值增加1
例如:

int a = 5;
a++;a++后,a就变成了6

那么,a++和++a有什么区别呢?
直接看两个例子:

int a = 5;
int b = 0;
b=a++;//先把a的值赋给b,然后a的值再自增1
b=++a//a的值先自增,然后再把a的值赋给b

知道了++以后,–其实也是类似的

2.3 +、-

这里的+和-表示的是一个值的正负号,正号可以省略,负号不能省略

2.4 sizeof

sizeof用来求变量和数据类型的大小

#include <stdio.h>
int main()
{
	int a = 0;
	printf("%zu\n", sizeof a);//当变量最为参数时,括号可以省略
	printf("%zu\n", sizeof(int));
	printf("%zu\n", sizeof(char));
	printf("%zu\n", sizeof(short));
	printf("%zu\n", sizeof(long long));
	printf("%zu\n", sizeof(float));
	printf("%zu\n", sizeof(double));
	printf("%zu\n", sizeof(long double));
}

运行结果:
在这里插入图片描述
需要注意的是,当sizeof求一个字符串的大小时,由于字符串后面会自己补一个"\0",所以得到的长度会多一个字符的长度

#include <stdio.h>
int main()
{
	char ch[] = "abcdef";
	printf("%zu", sizeof(ch));
}

运行结果:
在这里插入图片描述
sizeof也可以求数组的元素个数

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);//数组总大小/数组每个元素的大小就=元素个数
	printf("%d", sz);
}

运行结果:
在这里插入图片描述

2.5 类型

类型也是一个单目操作符,就比如int a = 0;int 就是指定a的类型,a就是类型的操作数

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值