CPP 如何在 unsigned int 值中使用布尔值?
CPP how is a boolean used in an unsigned int value?
我正在尝试理解此 cpp 代码,以便将其转换为 Java。 r1
是一个 unsigned int 位字段 但看起来这里它被设置为布尔值?
union GpioPins {
struct {
unsigned int ignoredPins1:2;
unsigned int r1:1;
unsigned int g1:1;
unsigned int b1:1;
} bits;
uint32_t raw;
GpioPins() : raw(0) {}
};
然后在包含
的循环中
GpioPins *bits = ...
uint8_t red = 141; // any number between 0..255
uint8_t mask = 1 << i; // i is between 0..7
bits->bits.r1 = (red & mask) == mask;
令人困惑的是最后一行。 (red & mask) == mask
不会解析为 true
或 false
吗?
即在 Java 这应该是这样的:
private static class GpioPins {
static class Pins {
int ignoredPins1;
int r1;
int g1;
int b1;
}
int raw = 0;
Pins bits;
}
然后
GpioPins bits = ...
int red = 141; // any number between 0..255
int mask = 1 << i; // i is between 0..7
bits.bits.r1 = (red & mask) == mask; // compile error, incompatible types
显然 cpp 代码中有一些我不明白的东西,但不知道它是什么 google :-)
将 bool
分配给 unsigned int
在 C++ 中是合法的。 true
会将其设置为 1
,false
会将其设置为 0
。这是在 C++ 中隐式完成的。
在 Java 中,行:bits.bits.r1 = (red & mask) == mask;
将不起作用,因为您不能将布尔值隐式分配给 int。
试试这个:bits.bits.r1 = ((red & mask) == mask) ? 1 : 0;
Doesn't (red & mask) == mask
resolve to true
or false
?
是的,确实如此!
接下来,在分配给 r1
期间,您的 true
或 false
被强制转换为 unsigned int
,值为 1
或 0
分别。 C++ 有 隐式转换 来实现这一点。
我正在尝试理解此 cpp 代码,以便将其转换为 Java。 r1
是一个 unsigned int 位字段 但看起来这里它被设置为布尔值?
union GpioPins {
struct {
unsigned int ignoredPins1:2;
unsigned int r1:1;
unsigned int g1:1;
unsigned int b1:1;
} bits;
uint32_t raw;
GpioPins() : raw(0) {}
};
然后在包含
的循环中 GpioPins *bits = ...
uint8_t red = 141; // any number between 0..255
uint8_t mask = 1 << i; // i is between 0..7
bits->bits.r1 = (red & mask) == mask;
令人困惑的是最后一行。 (red & mask) == mask
不会解析为 true
或 false
吗?
即在 Java 这应该是这样的:
private static class GpioPins {
static class Pins {
int ignoredPins1;
int r1;
int g1;
int b1;
}
int raw = 0;
Pins bits;
}
然后
GpioPins bits = ...
int red = 141; // any number between 0..255
int mask = 1 << i; // i is between 0..7
bits.bits.r1 = (red & mask) == mask; // compile error, incompatible types
显然 cpp 代码中有一些我不明白的东西,但不知道它是什么 google :-)
将 bool
分配给 unsigned int
在 C++ 中是合法的。 true
会将其设置为 1
,false
会将其设置为 0
。这是在 C++ 中隐式完成的。
在 Java 中,行:bits.bits.r1 = (red & mask) == mask;
将不起作用,因为您不能将布尔值隐式分配给 int。
试试这个:bits.bits.r1 = ((red & mask) == mask) ? 1 : 0;
Doesn't
(red & mask) == mask
resolve totrue
orfalse
?
是的,确实如此!
接下来,在分配给 r1
期间,您的 true
或 false
被强制转换为 unsigned int
,值为 1
或 0
分别。 C++ 有 隐式转换 来实现这一点。