編集:
uint32_t a=1;
a |= 0xD2D2D2D2 ; //set bits to 11010010 11010010 11010010 11010010
a &= ~1; // clear first bit (or mask)
、それは別に表示コードに良いです:あなたが必要な場合は
単にビット単位を使用するか、
とあなたには、いくつかのビットをクリアする必要がある場合は、ビット単位を使用して、いくつかのビットを設定します
:あなただけのいくつかのビット、単純にビット単位を使用するか、このように設定する必要がある場合
:
#include <stdio.h>
#include <stdint.h>
void print_bits(uint32_t u){
int i=31;
do{
if (u & 0x80000000) putchar('1'); else putchar('0');
u <<= 1;
if(i%8 == 0) putchar(' ');
}while(--i >= 0);
}
int main(){
uint32_t a=1;
a |= 0xD2D2D2D2 ; //set bits to 11010010 11010010 11010010 11010010
a &= ~1; // clear first bit (or mask)
print_bits(a); //output: 11010010 11010010 11010010 11010010
}
旧:明確なコードを持っているメインコード
stampabit(0xD2D2D2D2); // stampabit(0b11010010110100101101001011010010);
作業例:
#include <stdio.h>
#include <limits.h>
//#include <stdint.h>
int a=0;
void stampabit(int setBits){
a |= setBits;
}
int main()
{
int i;
stampabit(0xD2D2D2D2); // stampabit(0b11010010110100101101001011010010);
int n= sizeof(int) * CHAR_BIT; // number of bits in int (8, 16, 32, 64, ... bits)
int mask = 1 << (n-1); // sign bit mask
for (i=1; i<=n; ++i){
putchar(((a & mask)==0)?'0':'1');
a<<=1;
if(i%CHAR_BIT==0 && i<n)
putchar(' ');
}
}
出力:
11010010 11010010 11010010 11010010
いくつかの注意:
ここでそれだけでこれはあなたのパターン11010010 11010010 11010010 11010010使用を設定する
サンプルコードとそれは正常に動作しますが、符号なしの型を使用するのはclです早期にサインビットが必要ないことを示し、バグプルーフです。
ローカル変数を使用するか、ローカル変数をシフトする方が、意図的な場合を除き、グローバル変数を使用またはシフトするよりも優れています。
少なくとも最後のではなく、あなたが
#include <stdint.h>
からプラットフォーム依存のint利用int32_tかのuint32_tを必要としない場合、あなたは、いくつかのビットをクリアする必要がある場合は、ビット単位を使用して:
uint32_t a=1;
a |= 0xD2D2D2D2 ; //set bits to 11010010 11010010 11010010 11010010
a &= ~1; // clear first bit (or mask)
私はお役に立てれば。
「a」と「マスク」は、m.s.に移動しているため、「符号なし」にする必要があります。ビット(そうでなければ符号ビット)。この場合、 'unsigned a = 0xd2d2d2d2;' –
実装されていない関数 'void stampabit(a);'は 'unsigned stampabit(void);または' void stampbe(unsigned * a);である必要があります。あなたはしようとしている。おそらく、あなたは 'スタンプビート'を32回呼び出してビットを 'a'にします。 –