C 为什么1≤3等于8而不是6?

C 为什么1≤3等于8而不是6?,c,bit-shift,C,Bit Shift,在C中,我有这个枚举: 为什么1是因为二乘以三的幂等于八。因为二乘以三的幂等于八。将一个数字向左移动等于将该数字乘以2n,其中n是移动该数字的距离 为了证明这一点,让我们举个例子,假设我们有数字5,我们把它向左移两位,二进制中的5是00000101,也就是说 0×27+0×26+0×25+0×24+0×23+1×22+0×21+1×20=1×22+1×20=4+1=5 现在,将一个数字向左移动5相当于将该数字乘以2n,其中n是移动该数字的距离 为了证明这一点,让我们举个例子,假设我们有数字5,我

在C中,我有这个枚举:


为什么1是因为二乘以三的幂等于八。

因为二乘以三的幂等于八。

将一个数字向左移动等于将该数字乘以2n,其中n是移动该数字的距离

为了证明这一点,让我们举个例子,假设我们有数字5,我们把它向左移两位,二进制中的5是00000101,也就是说

0×27+0×26+0×25+0×24+0×23+1×22+0×21+1×20=1×22+1×20=4+1=5


现在,将一个数字向左移动5相当于将该数字乘以2n,其中n是移动该数字的距离

为了证明这一点,让我们举个例子,假设我们有数字5,我们把它向左移两位,二进制中的5是00000101,也就是说

0×27+0×26+0×25+0×24+0×23+1×22+0×21+1×20=1×22+1×20=4+1=5

现在,二进制中的51是0000 0001

通过向左移位3位,即二进制中的11为0000 0001

通过向左移动3位,即1以二进制方式思考。 你真的在这么做。 0001向左移动3次=1000=8

用二进制思考。 你真的在这么做。
0001向左移动3次=1000=8

为什么1输入3左移一个数字乘以x位等于将数字乘以2^x,而右移x位等于除以2^x!附加信息:这就是为什么多次使用位移位而不是乘法和除法来实现更快的运算@Swand这个公式让一切都清楚了一千倍,thanks@YassineHoussni:你说得对;是的;最好是研究和理解事物的作用,而不是疯狂地猜测。为什么1你输入3左移一个数字乘以x位只不过是将数字乘以2^x,右移x位等于除以2^x!附加信息:这就是为什么多次使用位移位而不是乘法和除法来实现更快的运算@Swand这个公式让一切都清楚了一千倍,thanks@YassineHoussni:你说得对;是的;最好是研究和理解事物的作用,而不是胡乱猜测。谢谢,我刚刚开始学习比特转换!谢谢,我刚刚开始学习比特转换!有时比完整性强——就像你的完美完整的答案一样。@chux这次不行。谢谢iharob的回答,这正是我需要的,以获得一个关于转换的清晰视图。有时比完整性强-就像你的完美完整的答案一样。@chux这次不是。感谢伊哈罗布的回答,这正是我需要得到一个关于转移清晰的看法。
enum {
    STAR_NONE =     1 << 0, // 1
    STAR_ONE =      1 << 1, // 2
    STAR_TWO =      1 << 2, // 4
    STAR_THREE =    1 << 3  // 8
};
0000 1000