位操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//编写一个函数把指定的值存到这个整数中指定的几位;
//e: 原始值 | 存储值 | 起始位 | 结束位 | 返回值 |
// 0x0 | 0x1 | 4 | 4 | 0x10 |
// 0xffff | 0x123 | 15 | 4 | 0x123f |
// 0xffff | 0x123 | 13 | 9 | 0xc7ff |
//
//1.设置一个make;将要设置的那几位置0,其他值不变;比如:~001111000000000 &
//2.将要往进放的值的对应位调整好对齐。
//3.用make 将放入值的其余位清零; 进行按位与& 0011110000000000
//4.将第三步得到的值,与第一步得到的原值,进行按位or或操作;

#include <stdio.h>
#include <stdlib.h>
int stare_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit)
{
unsigned int i;
unsigned make = 0;
for (i = starting_bit; i >= ending_bit; i--)
{
make |= 1 << i;
}
original_value = (~make)&original_value;
value_to_store <<= ending_bit;
value_to_store &= make;
original_value |= value_to_store;
return original_value;
}
int main()
{
int original_value;
int value_to_store;
unsigned starting_bit;
unsigned ending_bit;
printf("请输入 original_value, value_to_store, starting_bit, ending_bit:");
scanf("%x %x %x %x",&original_value, &value_to_store, &starting_bit, &ending_bit);
original_value = stare_bit_field(original_value, value_to_store, starting_bit, ending_bit);
printf("%x", original_value);

system("pause");
return 0;
}