zoukankan      html  css  js  c++  java
  • 修改指定数字的指定位

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

    例如:

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

    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 <stdio.h>
     2 #include <limits.h>
     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
    ",result);
    16     
    17 }
    18 int store_bit_field(int original_value,int value_to_store,unsigned starting_bit
    19 ,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 }
  • 相关阅读:
    Cefsharp支持MP4和MP3的CEF库cef.redist.x86.3.2623,对应Cefsharp49
    解读设计模式
    模拟支付宝、淘宝登录2
    模拟支付宝、淘宝登录1
    上一篇随笔是2011-11-21 17:23,唏嘘啊。。。
    像素格式
    YUV格式详解
    认识RGB和YUV
    WPF性能优化经验总结
    【日期正则表达式】
  • 原文地址:https://www.cnblogs.com/zydark/p/8252312.html
Copyright © 2011-2022 走看看