我正在使用逻辑AND <input type="checkbox" id="1" value="Value1" onclick="selectOnlyThis(this.id)" /> Option 1
<input type="checkbox" id="2" value="Value1" onclick="selectOnlyThis(this.id)" /> Option 2
<input type="checkbox" id="3" value="Value1" onclick="selectOnlyThis(this.id)" /> Option 3
<input type="checkbox" id="4" value="Value1" onclick="selectOnlyThis(this.id)" /> Option 4
和补充&=
运算符,并收到奇怪的编译错误。
~
当我将上面的第一个语句更改为以下等效语句时,一切正常。
// Constants
private const byte XML_MATCH_ID = 0x01;
private const byte XML_MATCH_MAC = 0x02;
private const byte XML_MATCH_DEFAULT = (XML_MATCH_ID + XML_MATCH_MAC);
// ...
byte matchingTags = XML_MATCH_DEFAULT;
// ... (reading XML nodes)
// Assume Machine ID doesn't match
matchingTags &= (byte)~XML_MATCH_ID; // Compiler error: Constant value '-2' cannot be converted to a 'byte'
// Assume MAC Address doesn't match
matchingTags &= (byte)~XML_MATCH_MAC; // Same compiler error but with "-3"
为什么编译器会抛出此错误?
答案 0 :(得分:2)
编译器似乎试图将赞美编译为常量。 我得到的编译器错误是&#34;在常量值计算中溢出&#34;
哪个不是那么奇怪。 byte
是Unsigned 8-bit integer。 (如果您正在寻找Signed 8-bit integer,那么您应该使用sbyte
)
~XML_MATCH_ID
返回int
的值-2
,该值byte (uint8)
无法转换为~XML_MATCH_ID
。
解决此问题的一种方法是将int
存储为临时int temp = ~XML_MATCH_ID; // temp now holds the value "-2"
byte temp2 = (byte)temp; // temp2 now holds the value "254"
matchingTags &= temp2;
变量,然后执行逻辑AND:
matchingTags &= (byte.MaxValue - XML_MATCH_ID);
或完全避免使用补语运算符:
<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
<property name="baselineOnMigrate" value="true" />
<property name="dataSource" ref="dataSource" />
</bean>