如果我有一个int a,可以说等于0。 有没有办法让我说左移101进入变量,然后在011的另一个步骤转移到它?然后我可以在最后得到int十进制数?它最终会变成0b00000000000000000000000000101011。或者我应该只使用OR操作。
答案 0 :(得分:4)
您无法将位移入变量;你可以在他们的OR:
int a = 0;
a |= 5;
printf("a = %d\n", a);
a <<= 3;
a |= 3;
printf("a = %d\n", a);
如果你的系统支持二进制常量,你可以使用那些而不是小数(你可以使用0
作为八进制的前缀为5和3,如果你愿意,你可以使用0x
作为十六进制 - 你可以使用根据品味的不同格式)。如果a
的起始值未知为0
,则您将在第一次|=
操作之前执行轮班分配操作。
最后,您必须担心左移有符号整数值,以便发生溢出 - 这会导致未定义的行为。但问题中的值不是问题。
答案 1 :(得分:2)
您需要先移位所需的位数,然后对新数据执行按位OR运算。
int a = 0;
a = a << 3;
a = a | 0x5;
a = a << 3;
a = a | 0x3;
printf("a=%x\n", a);
(使用单独的赋值和运算符代替复合运算符,使初学者更清楚。)
结果:
a=2b
答案 2 :(得分:1)
我有没有办法让左移101进入变量
没有。您需要先左移,然后添加(或OR)新值。
int eax = 0;
eax <<= 3;
eax |= 5;
答案 3 :(得分:0)
class Foo {
init() {
console.log("A");
console.log("B");
this.doX();
console.log("C");
}
doX(){}
}
class Bar extends Foo {
doX() {
console.log("X");
}
}
new Bar().init();
没有一种预先定义的方式来“移入”这样的值。编写可能的函数不会花费太多时间。
答案 4 :(得分:0)
据我所知 - 没有任何操作可以将一个位从一个整数“移位”到另一个整数。左移位运算符总是使用0
填充生成的空格,这样您就必须将它与例如|
- 操作相结合(实际上+
具有相同的效果你的情况)。
#include <stdio.h>
void printBinary(int b, int nrOfBits) {
for (int mask = (1 << nrOfBits); mask != 0; mask >>=1 ) {
char c = (b & mask) ? '1' : '0';
printf("%c", c);
}
}
int main()
{
int a = 0;
a = (a << 3) | 0x5;
printBinary(a, 8);printf("\n");
a = (a << 3) | 0x3;
printBinary(a, 8);printf("\n");
return 0;
}
在有符号数据类型上使用左移运算符时,请注意不要产生未定义的行为(参见cppreference concerting arithmetic operations):
当有符号整数算术运算溢出时(结果确实如此) 不适合结果类型),行为未定义