編輯:
如果你只需要設置一些位,只需使用按位或
如果你需要清除一些位,使用位和:
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
}
老:
如果你只需要設置一些位,只需使用按位或像這樣:
void stampabit(int setBits){
a |= setBits;
}
設置你的格局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
一些注意事項:
這裏只需示例代碼,它工作正常,但使用無符號類型是cl早期顯示你不需要簽名,這是bug證明。
使用局部變量或移動局部變量比使用或移動全局變量要好,除非這是有意的。
最後但並非最不重要,如果你不需要依賴於平臺INT使用int32_t或uint32_t的從
#include <stdint.h>
,如果你需要清除一些位,使用按位和:
uint32_t a=1;
a |= 0xD2D2D2D2 ; //set bits to 11010010 11010010 11010010 11010010
a &= ~1; // clear first bit (or mask)
我希望這可以幫助。
'a'和'mask'應該是'unsigned',因爲你正在轉移到m.s.位(否則爲符號位)。在這種情況下,'unsigned a = 0xd2d2d2d2;' –
您的未實現函數void void(a);'將需要'unsigned stampabit(void);'或'void stampabit(unsigned * a);'但是不清楚你正在努力去做。也許你打算把32次「stampabit」稱爲「a」。 –