我想读一个int。例如001.在我想要切入之后,A = 0,B = 0和C = 1.我想在C中做到这一点。谢谢!
答案 0 :(得分:1)
如果001
是整数值I
的位表示,则:
int A = (I >> 2) & 0x1
int B = (I >> 1) & 0x1
int C = I & 0x1
答案 1 :(得分:0)
您可以通过使用模数运算符(%)和整数除法(/)来实现所需的结果。当你开始学习C时,它比按位运算符更容易理解。
scanf("%d", &i);
a = i / 100;
b = (i % 100) / 10;
c = (i % 100) % 10;
答案 2 :(得分:0)
以Karl Bielefeldt的评论为基础:
您可以创建char和位域的并集,例如:
typedef union
{
unsigned char byte;
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
}TYPE_BYTE;
TYPE_BYTE sample_byte;
...然后为sample_byte.byte分配一个值,并将每个位作为sample_byte.b0,sample_byte.b1等访问。分配位的顺序取决于实现 - 阅读编译器手册以了解如何它实现了位域。
也可以使用更大的int类型创建位域。
<小时/> 编辑(2011-03-15):
假设您可能想要读取一个3位数的10位整数,并将这三个数字分成三个变量,这里有一些应该这样做的代码。它尚未经过测试,因此您可能需要进行一些调整:
void split_base10(const unsigned int input, unsigned int *a, unsigned int *b, unsigned int *c)
{
unsigned int x = input;
*c = x%10;
x /= 10;
*b = x%10;
*a = x/10;
}
祝你好运!