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 }
  • 相关阅读:
    局域网共享磁盘或文件夹访问
    Android实例-退出程序
    delphi 合并两个 Wav 文件流的函数
    Delphi数据库处理
    cxgrid的FINDPANEL编程
    Python之路【目录】
    Delphi TreeView – 自动展开树形结构
    Delphi TreeView – 自动给标题上加图片
    Delphi 发送邮件 通过Office Outlook
    Delphi Create(nil), Create(self), Create(Application)的区别
  • 原文地址:https://www.cnblogs.com/zydark/p/8252312.html
Copyright © 2011-2022 走看看