电流状态阅读:1011100111000111
刻录状态写作:10111111000111 //第10位和11位需要更新
电流状态阅读:10111111101111
刻录状态写作:1011100111000111 //第10和11位需要更新,因此
只是想确保您知道可以设置并清除单个位而不位于移动。 如果位移动是流程
的段部分,或者我已经误解了,那么我深表歉意:此代码将无济于事。 但是,它确实说明了单个位的设置和清除,因此我将其留在这里,希望有人有一天会发现它很有用。该代码应该是100%便携式的,我刚才对我进行了测试。
输出:是从实际终端输出中复制和粘贴的,而不会以任何方式伪造。
#include <stdio.h>
/*---------------------------------------------------------------
ConvertToBinary()
Returns a string binary representation of an input number.
Params: number to convert and the size of the data type
so we know how many leading zeros to pad
*---------------------------------------------------------------*/
char *ConvertToBinary(unsigned long long num, size_t nsize)
{
static char szRes[100];
long iii=0, bitpos = (long)nsize*8;
while (bitpos-- && iii < sizeof(szRes))
{
szRes[iii++] = (char) (((num >> bitpos) & 0x01) + '0');
if(!(bitpos%8) && bitpos)
szRes[iii++] = ' '; /*add space every 8 digits */
}
szRes[iii] ='\0'; /*cap it*/
return szRes;
}
int clear_bit(unsigned int x, int bitNum)
{
return x &= ~(1L << bitNum);
}
int test_bit(int x, int bitNum)
{
return !!(x & (1L << (bitNum)));
}
int set_bit(int x, int bitNum)
{
return x |= (1L << bitNum);
}
int main()
{
int num = 0, bitnum = 7;
printf("Num before operations: \t%s\n", ConvertToBinary(num, sizeof(num)));
num = set_bit(num, bitnum);
printf("Num after set bit #%d: \t%s\n", bitnum, ConvertToBinary(num, sizeof(num)));
num = clear_bit(num, bitnum) ;
printf("Num after clear bit #%d: \t%s\n", bitnum, ConvertToBinary(num, sizeof(num)));
getchar();
return 0;
}
Num before operations: 00000000 00000000 00000000 00000000
Num after set bit #7: 00000000 00000000 00000000 10000000
Num after clear bit #7: 00000000 00000000 00000000 00000000