算数操作符
/(除法)
%(取模)
int a = 5 / 2; //整数除法
double a = 5 / 2.0; //小数除法
double a = 5 / 2; //取模两边必须是整数
移位操作符
>>(右移)
<<(左移)
注意:移位数不能为负数(该规则未定义),且只能作用为于整数
//算术右移:右边丢弃,左边补原符号位
//逻辑右移:右边丢弃,左边补零
int a = -1;
//整数的二进制表示有:原码、反码、补码
//储存到内存的是补码
//10000000000000000000000000000001(原码)
//11111111111111111111111111111110(反码—除符号位,其他位按位取反)
//11111111111111111111111111111111(补码—在反码的基础上加1)
//11111111111111111111111111111111(向右移位,最右边丢弃,算术移位最左边补符号位)
int b = a >> 1;
printf("%d %d", a, b);
return 0;
//左移:左边丢弃,右边补零
int a = 5;
int b = a << 1;
//00000000000000000000000000000101
//00000000000000000000000000001010
位操作符
&-按二进制位与:对应二进制位全1为1
|-按位或:对应二进制位有1为1
^-按位异或:对应二进制位相同为0,相异为1
//&-按二进制位与:对应二进制位全1为1
int a = 3;
int b = 5;
int c = a & b;
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000001
//显然与完后c=1
//|-按位或:对应二进制位有1为1
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000111
//显然或完后c=7
//^-按位异或:对应二进制位相同为0,相异为1
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000110
//显然异或完c=6
练习:不引用中间变量交换a = 3,b=5的值
//加减法—可能会溢出(当给两个极大的值)
int main()
{
int a = 3;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
printf("%d %d\n", a, b);
return 0;
}
//故引入异或法(不用进位试用范围广,但运算速度慢,可读性差)
int main()
{
int a = 3;
int b = 5;
//0011
//0110
//0101
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d\n", a, b);
}
求整数二进制原码中1的个数
int main()
{
int num = 0;
int count = 0;
int i = 0;
scanf("%d", &num);
if (num > 1)
{
for (i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)
{
count++;
}
}
}
else
{
int b = ~(num - 1);
for (i = 0; i < 32; i++)
{
if (((b >> i) & 1) == 1)
{
count++;
}
}
}
printf("%d\n",count+1); //最高位不取反
return 0;
}
结构体操作符
.(结构体.成员名)
->(结构体指针.成员名)
int main()
{
int a = 10;
//使用struct stu这个类型创建了一个学生对象s1,并初始化
struct stu s1 = { "zhangzhiwei",20,"20231016" };
struct stu *ps = &s1;
printf("%s\n", (*ps).name);
printf("%s\n", ps->id);
printf("%s\n", s1.name);
printf("%d\n", s1.age);
printf("%s\n", s1.id);
return 0;
}
隐式类型转换:
表达式中的字符和短整型操作数在使用之前被转换为普通整型(整形提升)