C++
示例
int a = 1; //0001b int b = a << 1; //0010b std::cout << "a = " << a << ", b = " << b << std::endl;
输出结果
a=1,b=2
为什么
左移将使左手值(a)的位偏移右数()上指定的数字1,本质上将最低有效位填充0,因此将5(binary00000101)的值左移4次(例如5<<4)将产生80(binary01010000)的值。您可能会注意到,将值向左移1次也与将值乘以2相同,例如:
int a = 7;
while (a < 200) {
std::cout << "a = " << a << std::endl;
a <<= 1;
}
a = 7;
while (a < 200) {
std::cout << "a = " << a << std::endl;
a *= 2;
}但应注意,左移操作会将所有位(包括符号位)向左移,例如:
int a = 2147483647; //01111111111111111111111111111111 int b = a << 1; //11111111111111111111111111111110 std::cout << "a = " << a << ", b = " << b << std::endl;
可能的输出:a=2147483647,b=-2
尽管某些编译器会产生看起来预期的结果,但应注意的是,如果左移带符号的数字以使符号位受到影响,则结果是不确定的。如果要移位的位数是负数还是大于左侧类型可以容纳的位数,则也不确定,例如:
int a = 1; int b = a << -1; //未定义的行为 char c = a << 20; //未定义的行为
逐位左移不会更改原始值的值,除非专门指定使用逐位分配复合运算符<<=:
int a = 5; //0101b a <<= 1; // a = a << 1;
热门推荐
10 五一公司放假祝福语简短
11 追星女孩的祝福语简短
12 给长辈端午祝福语 简短
13 生日祝福语有诗意简短
14 团圆日祝福语简短
15 中秋商务祝福语简短最新
16 温暖文艺简短祝福语短句
17 男孩上学祝福语简短的
18 入住酒店文案祝福语简短