您的位置:首页 > 编程语言 > C语言/C++

C语言练习11.12

2017-11-16 00:48 155 查看
位运算早就知道了,但是学校没有要求深入也就没有学习,所以我也就没有看过多少。但是还是很有挑战的,因为没有做过。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言