这实际上对谷歌来说相当棘手。
如何设置(按位或)32位int的前两位?
我从我尝试的所有内容中收到编译器警告。
答案 0 :(得分:6)
试试这个:
integerVariable |= 3 << 30;
使用(1 <&lt; 31)|可能更清楚(1 <&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 30)代替(3&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 30),或者您可以添加关于该行为在任何情况下,编译器都应该能够将表达式优化为单个值,该值等于int.MinValue >> 1
== int.MinValue / 2
。
如果是uint
:
uintVar |= 3u << 30;
答案 1 :(得分:1)
integerVariable |= 0xC0000000;
使用0xC0000000u
表示无符号整数变量。
以十六进制表示法显示整个32位整数对我来说比Mehrdad的答案中的位移更清晰。但是,它们可能会编译成相同的东西,所以请使用看起来更清晰的东西。