&这个是按位与
&&这个是逻辑与
||逻辑或,
!逻辑取反
b=++a是一个表达式,c++是一个表达式 ,++a是一个表达式, a++是一个表达式
逗号表达式的优先级是最低的,先赋值
#include"stdio.h"
#include"string.h"
int main()
{
int a,b,c;
a=5;
c=++a;//c=6,a=6;
b=++c, c++, ++a, a++;//b=7, c=8,a=8;
b+=a++ + c;//加加运算符高,a=9,23,c=8
printf("a=%d b=%d c=%d\n:",a,b,c);//+=比++低
return 0;
}
求二进制数
负1的原反补
只能算正数和零
#include <stdio.h>
int numof(int n)
{
int jishu=0;
while(n)
{
if(n%2==1)
{
jishu++;
}
n=n/2;
}
return jishu;
}
int main()
{
int a;
scanf("%d",&a);
int zhen=numof(a);
printf("%d",zhen);
return 0;
}
原理 比如10 10的二进制数 是1010
10%2=0 10\2=5 5%2=1 5/2=2 2%2=0 2/2=1 1%2 =1 1/2=0
这样就算出二进制1的个数了
如果用unsigned 然后你的数字是负数的话,你那个负数就会被编译器变成补码,负数的补码是32个·1
正数的就正常
移位的方法
#include <stdio.h>
int numof(unsigned int n)
{
int jishu=0;
for(int t=0;t<32;t++)
{
if(((n>>t)&1)==1)
{
jishu++;
}
}
return jishu;
}
int main()
{
int a;
scanf("%d",&a);
int zhen=numof(a);
printf("%d",zhen);
return 0;
}
二进制写的
#include <stdio.h>
int numof(unsigned int n)
{
int jishu=0;
while(n)
{
n=n&(n-1);
jishu++;
}
return jishu;
}
int main()
{
int a;
scanf("%d",&a);
int zhen=numof(a);
printf("%d",zhen);
return 0;
}
比较二进制位数有几位不同
#include <stdio.h>
int pp(int a,int b)
{
int count=0;
for(int i=0;i<32;i++)
{
if(((a>>i)&1)!=((b>>i)&1))
{
count++;
}
}
return count;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int ww=pp(a,b);
printf("%d\n",ww);
}
求两个二进制位数有几位不同
也可以用异或操作符
相同为0,不同
#include <stdio.h>
int pp(int a,int b)
{
int mm=a^b;
int count=0;
while(mm)
{
mm=mm&(mm-1);
count++;
}
return count;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int ww=pp(a,b);
printf("%d\n",ww);
}
输出二进位偶数和奇数
#include <stdio.h>
int main()
{
int a;
int num;
scanf("%d",&a);
//奇数位
for(int i=30;i>=0;i-=2)
{
printf("%d ",(a>>i)&1);
}
printf("\n");
for(int j=31;j>=0;j-=2)
{
printf("%d ",(a>>j)&1);
}
return 0;
}
全局变量,静态变量都是放在静态区的
全局变量,静态变量不初始化的时候默认会被初始化成0
局部变量,放在栈区,不初始化,默认值是随机值
两个数,一个是有符号,另一个无符号,那么有符号就会转换成无符号
观察图形的规律
#include <stdio.h>
int i;//0
int main()
{
int s;
while(scanf("%d",&s))
{
for(int i=0;i<s;i++)
{
for(int j=0;j<s;j++)
{
if(i+j==4)
printf("*");
else if(i==j)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
C语言scanf返回值读成功就返回数的个数,不成功呢就返回EOF
判断润年
&&和||是真就为1 假的话为0
#include <stdio.h>
int jj(int b)
{
return ((b%4==0&&b%100!=0)||(b%400==0));
}
int main()
{
int a,p;
scanf("%d %d",&a,&p);
int aa[13]={0,31,28,31,30,30,31,31,30,30,31,31,30};
int m=aa[p];
if(jj(a)==1&&p==2)
{
m++;
}
printf("%d\n",m);
return 0;
}
标签:return,int,scanf,printf,作业,++,讲解,include,结构
From: https://blog.csdn.net/2301_77634163/article/details/139569806