reference:language:bitshift
no way to compare when less than two revisions
差别
这里会显示出您选择的修订版和当前版本之间的差别。
前一修订版 | |||
— | reference:language:bitshift [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== bitshift left (<<), bitshift right (>>) ====== | ||
+ | |||
+ | ===== 描述 ===== | ||
+ | |||
+ | 在C++语言中有两个移位运算符:左移位运算符(<< | ||
+ | |||
+ | 想了解有关位的更多信息可以点击 这里。 | ||
+ | ===== 语法 ===== | ||
+ | |||
+ | variable << number_of_bits | ||
+ | variable >> number_of_bits | ||
+ | ===== 参数 ===== | ||
+ | |||
+ | variable - (byte, int, long) number_of_bits integer <= 32 | ||
+ | ===== 例子 ===== | ||
+ | <code cpp> | ||
+ | int a = 5; // 二进制数: | ||
+ | int b = a << 3; // 二进制数: | ||
+ | int c = b >> 3; // 二进制数: | ||
+ | </ | ||
+ | 当你将x左移y位时(x<< | ||
+ | <code cpp> | ||
+ | int a = 5; // 二进制: 0000000000000101 | ||
+ | int b = a << 14; // 二进制: 0100000000000000 - 101中最左边的1被丢弃 | ||
+ | </ | ||
+ | 如果你确定位移不会引起数据溢出,你可以简单的把左移运算当做对左运算元进行2的右运算元次方的操作。例如,要产生2的次方,可使用下面的方式: | ||
+ | < | ||
+ | 1 << 0 == 1 | ||
+ | 1 << 1 == 2 | ||
+ | 1 << 2 == 4 | ||
+ | 1 << 3 == 8 | ||
+ | ... | ||
+ | 1 << 8 == 256 | ||
+ | 1 << 9 == 512 | ||
+ | 10 << 1 == 1024 | ||
+ | ... | ||
+ | </ | ||
+ | 当你将x右移y位(x>> | ||
+ | <code cpp> | ||
+ | X = -16; // | ||
+ | Y = X >> 3 // | ||
+ | </ | ||
+ | 这种结果,被称为符号扩展,往往不是你想要的行为。你可能希望左边被移入的数是0。右移操作对无符号整型来说会有不同结果,你可以通过数据强制转换改变从左边移入的数据: | ||
+ | <code cpp> | ||
+ | X = -16; // | ||
+ | int y = (unsigned int)x >> 3; // 二进制: 0001111111111110 | ||
+ | </ | ||
+ | 如果你能小心的避免符号扩展问题,你可以将右移操作当做对数据除2运算。例如: | ||
+ | <code cpp> | ||
+ | INT = 1000; | ||
+ | Y = X >> 3; 8 1000 // | ||
+ | </ | ||
+ | |||
reference/language/bitshift.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1