位运算早就知道了,但是学校没有要求深入也就没有学习,所以我也就没有看过多少。但是还是很有挑战的,因为没有做过。
1打印下面的图形。
*
***
*****
***
*
#include<stdio.h>
int main()
{
int i,j,k;
int n;
scanf("%d", &n);
for(i=1;i<=n/2+1;i++){
for(j=n/2; j>=i; j--)
printf(" ");
for(k=1; k<2*i; k++)
printf("*");
printf("\n");
}
for(i=1;i<=n/2;i++){
for(j=0;j<i;j++)
printf(" ");
for(k=i;k<=(n/2)*2-i;k++)
printf("*");
printf("\n");
}
return 0;
}
练习:
1.给定一个整型数a,设置a的bit3(为1),保证其他位不变。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 1 << 3; //右移两位,将1移至第三位。
a = a | b; //将第三位变成1。
printf("a = 0x%x\n", a);//打印结果。
return 0;
}
2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 0x1f << 3;
a = a & ~b;
a = a | 12 << 3; //将3到7位或上12(d)
printf("a = 0x%x\n", a);
return 0;
}
3.给定一个整型数a,清除a的bit15,保证其他位不变。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 1 << 15; //右移15位,将1放置15位
a = a & ~b; //取反,并清0
printf("a = 0x%x\n", a);
return 0;
}
4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 0x1ff << 15; //右移15位,将最右边的一放置15位
a = a & ~b; //取反,并清0
printf("a = 0x%x\n", a);
return 0;
}
5.给定一个整形数a,取出a的bit3~bit8。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 0x3f << 3;
b = a & b;//与出3到8位的二进制数字
b = b >> 3;
printf("a = 0x%x\n", b);
return 0;
}
6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 0x7ff << 7;
a = a & ~b;
a = a | (937 << 7);
printf("a = 0x%x\n", a);
return 0;
}
7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 17 << 7; //17 左移7位
a = a + b;//相加
printf("a = 0x%x\n", a);
return 0;
}
8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17.
#include <stdio.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned int b = 0x7ff << 7;
a = (a & ~b) + (937<<7);//将7到17 位重新赋值 937
a = (a & ~(0x1f << 21)) + (17 << 21);//将21到25位重新赋值17
printf("a = 0x%x\n", a);
return 0;
}