操纵传感器数据后,写入位流

问题描述 投票:0回答:1
刻录状态写作:101111111001111 //第三/第4位需要更新

电流状态阅读: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; }
c bit
1个回答
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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.