练习:
1.给定一个整型数a,设置a的bit3(为1),保证其他位不变。
2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
3.给定一个整型数a,清除a的bit15,保证其他位不变。
4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
5.给定一个整形数a,取出a的bit3~bit8。
6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17.
第一题:
#include<stdio.h>
int main(void)
{
int a = 0x12345678;
a = (a | (0x1 << 3));
printf("0x%x",a);
}
运行结果:0x12345678
8表示为二进制是 1000
1是它的第三位
1 | 1 = 1
第二题:
#include<stdio.h>
int main(void)
{
int a = 0x12345678; //给一个整数十六进制12345678
a = a | (0b11111<<3); //将3到7位的数值设定为1
printf("0x%x",a);
}
运行结果:0x123456f8
3到7位本来是01111
11111 | 01111 = 11111
f代表十六进制的15
第三题:
#include<stdio.h>
int main(void)
{
int a = 0x12345678; //给一个整数十六进制12345678
a = a = (a & (~(0b1<<15))); //将第15位的数清零
printf("0x%x",a);
}
运行结果:0x12345678
5的二进制是0101
第十五位本来就是0
清零之后任然是0
第四题:
#include<stdio.h>
int main(void)
{
int a = 0x12345678; //给一个整数十六进制12345678
a = a = (a & (~(0x1ff<<15))); //将第15位到23位的数清零
printf("0x%x",a);
}
运行结果:0x12005678
第五题:
#include<stdio.h>
int main(void)
{
int a = 0x12345678; //给一个整数十六进制12345678
a = (a & (0x3f<<3)); //取出第3个到第8个数值
a >>= 3;
printf("0x%x",a);
}
运行结果:0x78
01111000
取出第三个到第八个是01111
打印成十六进制就是78
第六题:
给你三个整形数据,找出其中最大的整数
#include<stdio.h>
int main(void)
{
int a = 22;
int b = 33;
int c = 44;
int max;
if(a > b)
{
if(a > c)
{
max = a;
}
else
{
max = c;
}
}
else
{
if(b > c)
{
max = b;
}
else
{
max = c;
}
}
printf("max=%d",max);
}
第七题:求1+2!+3!+4!+…….+20!的和
#include<stdio.h>
int main(void)
{
int i;
int s = 1;
int sum = 0;
for(i=1; i<=20; i++)
{
s = s * i;
sum = sum + s;
}
printf("sum = %d",sum);
}
第八题:求1-1/2+1/3-1/4…….+1/99-1/100的数值
本来写的程序:
int main(void)
{
int i;
int sum = 0;
for(i=1; i<=100; i++)
{
if((i%2)==0) //把2 4 6 ....100变成负数
{
i = i * (-1);
}
else
{
i = i; //1 3 5 7 还是正数
}
sum = sum + (1/i);
}
printf("sum = %d",sum);
}
结果这个程序出不来 我觉得应该是有分数 所以我把数据类型改成float
#include<stdio.h>
int main(void)
{
float i;
float sum;
for(i=1; i<=100; i++)
{
if((i%2)==0)
{
i = i * (-1);
}
else
{
i = i;
}
sum = sum + (1/i);
}
printf("sum = %f",sum);
}
转换成浮点型之后取余就不可以用了!尴尬!
我把两项看成一项算了一下如下:
int main(void)
{
float i;
float sum = 0;
for(i=1; i<=100; i+=2)
{
sum = sum + (1/(i*(i+1)));
}
printf("sum = %f",sum);
}