博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
修改指定数字的指定位
阅读量:4661 次
发布时间:2019-06-09

本文共 1333 字,大约阅读时间需要 4 分钟。

假定整数中的位从右到左进行编号,修改指定数字的指定位

例如:

原始值          需要存储的指             起始位                     结束位                     返回值

0xffff               0x123                                15                             4                              0x123f

函数的功能可以分为以下5步完成

原始值    需要存储的值   起始位  结束位  返回值 0xffff    0x123           15       4      0x123f  1.创建掩码既需要改变的值得起始位和结束位都为1既 1111 1111 1111 0000  2.用掩码的反码对原值进行and操作,原值变为0000 0000 0000 1111 3.把需要存储的值左移ending_bit的值位 0000 0001 0010 0011  变为  0001 00010 0011 0000 4.把移位后的值与掩码进行and操作,变为0001 0010 0011 0000 5.用4的值与原值进行or操作0001 0010 0011 1111 0x123f

代码如下:

1 #include 
2 #include
3 #define INT_BIT (CHAR_BIT*sizeof(int)) 4 int store_bit_field(int original_value,int value_to_store,unsigned starting_bit 5 ,unsigned ending_bit); 6 7 int main (void) 8 { 9 int original_value=0xffff;10 int value_to_store=0x123;11 unsigned start=13;12 unsigned end=9;13 int result;14 result=store_bit_field(original_value,value_to_store,start,end);15 printf("%d\n",result);16 17 }18 int store_bit_field(int original_value,int value_to_store,unsigned starting_bit19 ,unsigned ending_bit)20 {21 /*创建移位的掩码*/22 unsigned int mask=~0;23 mask>>=INT_BIT-(starting_bit-ending_bit+1);24 mask<<=ending_bit;25 26 original_value&=~mask;27 value_to_store<<=ending_bit;28 value_to_store&=mask; 29 return original_value|value_to_store;30 31 }

 

转载于:https://www.cnblogs.com/zydark/p/8252312.html

你可能感兴趣的文章
canvas绘画交叉波浪
查看>>
Linux 内核分析
查看>>
学习进度条第十一周
查看>>
linux常用命令
查看>>
设置SQL PLUS环境
查看>>
关于虚拟机VM
查看>>
eclipse、tomca和jvm的相关内存配置
查看>>
python的迭代器
查看>>
spy memcached spring demo
查看>>
三年工作总结
查看>>
【SAS ADVANCE】Performing Queries Using PROC SQL
查看>>
Hive新功能 Cube, Rollup介绍
查看>>
webpack:(模块打包机)
查看>>
程序员不得不知的座右铭(世界篇)
查看>>
表格-鼠标经过单元格变色(暂不支持IE6)
查看>>
实时读取日志文件
查看>>
【寒假集训系列2.12】
查看>>
2018牛客多校第六场 I.Team Rocket
查看>>
c++初始化函数列表
查看>>
JS的this总结(上)-call()和apply()
查看>>