69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
int
store_bit_field ( int original_value , int value_to_store ,
unsigned int start_bit , unsigned int end_bit );
int
main ( void )
{
int new_value;
new_value = store_bit_field ( 0x0 , 0x1 , 3 , 3 );
printf ("%x\n" , new_value );
return EXIT_SUCCESS;
}
int
store_bit_field ( int original_value , int value_to_store ,
unsigned int start_bit , unsigned int end_bit )
/*
** 将一个整数插到另一个整数的某段位域内
*/
{
int new_value;
/*
** 构造个演码,需要被复制位域全为0,其他全为1
*/
int mask =
~ ( ( (~(unsigned int)0) >> (31 - start_bit) ) << end_bit );
value_to_store <<= end_bit; /* 将需要被复制的东西对准 地方 */
mask = mask & original_value; /* 将地方腾出来 */
value_to_store |= mask; /* 将要复制的东西挖出 */
new_value = mask & value_to_store; /* 复制进去 */
return new_value;
}