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 祝福语驱散霉运的话简短