位运算符
对存储的二进制码的每一位进行操作(不管是不是符号位,只对位进行操作)
~ | 位逻辑反 |
& | 位逻辑与(每位相与,同1为1) |
I | 位逻辑或(每位相或,同0为0) |
^ | 位逻辑异或(不同为1,相同为0) |
>> | 右移位 |
<< | 左移位 |
- 位移运算中运动量必须为整形结果数值,表达式也必须为整形结果数值
- 对于左移,补0;对于无符号右移,补,有符号右移,补符号位
思考题: //从右到左,低位到高位,从第0位开始
将a第三位置1,其他保持不变 //a = a | (1<<3)
将a第三位置0,其他位保持不变 //a = a & (~(1<<3))
将a第【7:4】位置0101,其他保持不变 //a = a & (~(0xf<<4)) | (0x5<<4)
打印一个整数的二进制形式 //右移动后 & 1,确定该位是1还是0,不断循环到最后
赋值运算符
+= | a += b 等价于a = a + b |
-= | a -= b 等价于 a = a - b |
*= | a *= b 等价于 a = a * b |
/= | a /= b 等价于 a = a / b |
%= | a %= b 等价于 a = a % b |
&= | a &= b 等价于 a = a & b |
I= | a I= b 等价于 a = a I b |
^= | a ^= b 等价于 a = a ^ b |
>>= | a >>= b 等价于 a = a >> b |
<<= | a <<= b 等价于 a = a << b |
特殊运算符
- 条件运算符(? : )
三目运算符,真返回?后内容,假返回:后内容
//一个条件运算符代替if~else语句的例子
int x, y = 25;
x = 70;
y = x++ > 70 ? 100 : 0; //判断x++是否大于70,是输出100,否输出0
printf("x = %d, y = %d", x, y);
- sizeof
sizeof(类型或变量名); //针对数据类型判断所占字节
int x = sizeof(double);
输出函数
-
字符输出函数 putchar©
c为字符常量、变量或表达式
功能:把字符c输出的显示器上 -
格式输出函数 printf(“格式控制串”, 输出表)
格式控制串前有%修饰
格式符 | 作用 |
---|---|
i, d | 十进制整数 |
x, X | 十六进制无符号整数 |
o | 八进制无符号整数 |
u | 无符号十进制整数 |
c | 单一字符 |
s | 字符串 |
e, E | 指数形式浮点小数 |
f | 小数形式浮点小数 |
g | e和f中较短一种 |
%% | 百分号本身 |
附录:思考题代码
#include <stdio.h>
void f1()
{
unsigned int a = 181;
unsigned int b = a | (1<<3);
int i = 31, j = 31;
printf("将a的第三位置1,其他保持不变\n");
printf("a的值为:%d\n", a);
printf("b的值为:%d\n", b);
printf("a的二进制为:");
while(i >= 0)
{
printf("%d", (a >> i) & 1);
i--;
}
printf("\n");
printf("b的二进制为:");
while(j >= 0)
{
printf("%d", (b >> j) & 1);
j--;
}
printf("\n");
}
void f2()
{
unsigned int a = 207;
unsigned int b = a & (~(1<<3));
int i = 31, j = 31;
printf("将a的第三位置0,其他保持不变\n");
printf("a的值为:%d\n", a);
printf("b的值为:%d\n", b);
printf("a的二进制为:");
while(i >= 0)
{
printf("%d", (a >> i) & 1);
i--;
}
printf("\n");
printf("b的二进制为:");
while(j >= 0)
{
printf("%d", (b >> j) & 1);
j--;
}
printf("\n");
}
void f3()
{
unsigned int a = 249;
unsigned int b = a & (~(0xf<<4) | (0x5<<4));
int i = 31, j = 31;
printf("将a的【7:4】置为0101,其他保持不变\n");
printf("a的值为:%d\n", a);
printf("b的值为:%d\n", b);
printf("a的二进制为:");
while(i >= 0)
{
printf("%d", (a >> i) & 1);
i--;
}
printf("\n");
printf("b的二进制为:");
while(j >= 0)
{
printf("%d", (b >> j) & 1);
j--;
}
printf("\n");
}
int main(int argc, char *argv[])
{
f1();
f2();
f3();
return 0;
}