C语言算术符号
算术右移
右边丢弃,左补符号位
#include<stdio.h>
int main()
{
int a = 16;
a >> 1;
return 0;
}
#include<stdio.h>
//按2进制位异或
//相同为0,相异为1
int main()
{
int a = 16;
int b = 5;
a=a^b;
b=a^b;
a=a^b
printf("%d\n", a);
return 0;
}
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf_s("%d", &num);
while (num)
{
if (num%2==1)
{
count++;
}
num = num / 2;
}
printf("%d\n", count);
return 0;
}
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf_s("%d", &num);
for (int i = 0; i < 32; i++)
{
if ((num>>i)&1==1)
{
count++;
}
}
printf("%d\n", count);
return 0;
}
sizeof不参与运算
a=a|a(1<<2)
a=a&a(~(1<<2))
sizeof传地址
a>b?a:b求最大值
int c=(a>b,a=b+10,b=a+1)
while(a=get_val(),count_val(a),a>0){
}
逗号表达式从左到右以此计算
struct stu{
成员变量
char name[20];
int age;
char id[20];
}
int main{
struct stu s1={"sdasa",20,"sda"};
struct stu *ps=&s1;
printf("%d",(*ps).name)或者printf("%d",ps->name);
printf("%d",s1.age) ("%d",ps->age);
printf("%d",s1.id)
printf("%d",s1.name)
return 0;
}
整形提升
char a=3;
00000011;
char b=127;
01111111;
char c=a+b;
10000010;
111111111111111111111111100000010补码
100000000000000000000000011111110原码->-126