簡體   English   中英

如何用整數中的任意位替換/覆蓋short數組中任意位置的任意數量的位

[英]How to replace/overwrite an arbitrary number of bits in an arbitrary position in an array of short with arbitrary bits from an integer

我有一個要嘗試以以下形式編寫的函數(並且沒有完全找到我要尋找的內容—如果這是一個重復項,請僅將我指向正確的位置—即使它不是intshort s,但是用char s和int代替,那就可以了):

put_bits(short *array_of_short, int significant_bits, int bit_offset, int integer_to_append)

當我改寫了significant_bitsinteger_to_appendbit_offsetarray_of_short

我想通過僅覆蓋(或按位排序,疊加或替換)位到數組中的位置來完成事情(我不想向數組中添加更多元素或分配更多內存),即可能很容易,但是效率很低,只是跟蹤偏移量轉換為數組中的元素數量,偏移量是否落在短褲的邊界上,以及將整數位移至適當的偏移量或將其移至適當的偏移量短(s)—但這似乎是開銷的負擔,而且計算量超出了我需要的,而不僅僅是將位運算到適當的位置,但是我有點茫然……

因此,例如,我有一個整數,其中將包含任意數量的“有效”位-假設在此示例中有6個。因此,值將為0到63

0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0011 1111

我想將其覆蓋(或按位或此)到任意點的任意大小的short數組。 所以如果我有

整數:

0000 0000 0000 0000 0000 0000 0010 0001

短數組:

0100 1000 0100 1100 : 1100 0010 0110 0000 : 0000 0000 0000 0000 : 0000 0000 0000 0000

我想在位置42處追加:

0100 1000 0100 1100 : 1100 0010 0110 0000 : 0000 0000 0000 1000 : 0100 0000 0000 0000

如果我完全不在家或者我沒有道理,也請讓我知道。

如果我正確理解了您的問題,您實際上想將您的數組視為位數組。 當然,c中沒有位數組這樣的結構,但是您可以實現它。 是以int為基本類型的位數組的示例。 您可以采用short作為基本類型的解決方案,然后逐個設置如下:

for( i = 0 ; i< sizeof(int)*8;++i)
{
       unsigned int flag = 1;
       flag = flag << i;
       if( int_num & flag)
           SetBit( array_of_short, bit_offset + i ); 
}

void  SetBit( short array_of_short[ ],  int k )
{
   array_of_short[k/16] |= 1 << (k%16);  // Set the bit at the k-th position in  array_of_short[i]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM