赞
踩
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
如果表达式1为真,那么就计算表达式2,表达式2的结果为整个式子的 结果;
如果表达式1为假,那么就计算表达式3,表达式3的结果为整个式子的结果。
例如求两个数的最大值
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
printf("请输入两个数:\n");
scanf("%d %d", &a, &b);
c = a > b ? a : b;
printf("较大的数为:%d\n", c);
return 0;
}
这涉及到数据在内存中的存储形式
不了解的小伙伴可以先去看这篇:
【C语言篇】数据在内存中的存储(超详细)
<<
左移操作符
>>
右移操作符
移位操作符的操作数只能是整数
移位规则:左边抛弃、右边补0
#include <stdio.h>
int main()
{
int num = 10;
int n = num<<1;
printf("n= %d\n", n);
printf("num= %d\n", num);
return 0;
}
移位规则:⾸先右移运算分两种:
- 逻辑右移:左边⽤0填充,右边丢弃
- 算术右移:左边⽤原该值的符号位填充,右边丢弃
#include <stdio.h>
int main()
{
int num = 10;
int n = num>>1;
printf("n= %d\n", n);
printf("num= %d\n", num);
return 0;
}
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
警告⚠⚠:对于移位运算符,不要移动负数位,这个是标准未定义的。
一般更多采用算术右移
位操作符有:
& //按位与
| //按位或
^ //按位异或
~ //按位取反
注:他们的操作数必须是整数。
/int main() //{ // int a = 6; // //00000000000000000000000000000110 - 6的补码 // // // int b = -7; // //10000000000000000000000000000111 // //11111111111111111111111111111000 // //11111111111111111111111111111001 -> -7的补码 // // // int c = a & b;//a和b的补码的二进制位进行运算 // //对应的二进制位,有0则为0,两个同时为1,才为1 // // // //00000000000000000000000000000110 - 6的补码 // //11111111111111111111111111111001 -> -7的补码 // //00000000000000000000000000000000 // printf("%d\n", c); // // return 0; //}
不能创建临时变量(第三个变量),实现两个整数的交换。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
printf("a = %d b = %d\n", a, b);
return 0;
}
这种方法在数据较大时会发生溢出
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b
printf("a = %d b = %d\n", a, b);
return 0;
}
求一个整数在内存中存储二进制1的个数
int count_bit_one(unsigned int n)
{
int count = 0;
while (n)
{
if ((n % 2) == 1)
count++;
n = n / 2;
}
return count;
}
#include <stdio.h>
int count_bit_one(int n)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
return count;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。