复习内容
按位取反 ~
1变0 0变1
输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include <stdio.h>
int main()
{
int x,i=0,n,p1,p2;
int a[100]={0};
printf("Please input a number:");
scanf("%d",&x);
printf("Please input p1:");
scanf("%d",&p1);
printf("Please input p2:");
scanf("%d",&p2);
while(x)
{
a[i]=x%2;
x=x/2;
i++;
}
n=i;
printf("The binary system is :\n");
for (i=31;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
printf("From p1 to p2 is:\n");
for (i=p2-1;i>=p1-1;i--)
{
if (a[i]==0)
{
printf("1");
}
if(a[i]==1)
{
printf("0");
}
}
printf("\n");
return 0;
}
按位与 &
位都为1时,结果为1,否则为0.
按位或 |
有一位是1时,该位的结果为1,否则为0
按位异或 ^
当两个位值不相同为1,否则为0
左移 << 移出的高位直接丢弃,低位出现的空位补0
右移 >>
错误
这里为int型 不好按位取反
这个while循环用的太好了
编写程序,实现strcmp()相同功能myStrcmp()函数
#include <stdio.h>
int fun1(char*str1, char*str2)
{
int ret=0;
while((!(ret=*(unsigned char*)str1-*(unsigned char*)str2))&&*str1)
{
str1++;
str2++;
}
if(ret<0)
return -1;
if(ret>0)
return 1;
return 0;
}
int main()
{
int n;
char str1[1000],str2[1000];
gets(str1);
gets(str2);
n=fun1(str1,str2);
printf("%d\n",n);
return 0;
}