main() { char x=040; printf("%d\n",x=x<<1);} 答案是 64 大神最好把原因说下 菜鸟求
作者&投稿:茹狠 (若有异议请与网页底部的电邮联系)
main() { char x=040; printf("%d\n",x=x<<1);} 答案是 64 大神最好把原因说下 菜鸟求~
<<表示二进制的左移操作,即将二进制各位顺次向左移动一位。
则,二进制变为0100 0000,对应的十进制为64.
以0开头的数是八进制数,八进制数40化成二进制数是0010 0000,左移一位变成0100 0000即十进制的64
如果你对二进制不了解,可以化成十进制,040,即八进制数40,化成十进制数是32,左移一位,相当于乘以2,32*2,=64
还有什么不明白的吗?
040是八进制,十进制是32。
x=x<<1;表示把x左移一位赋给x,二进制左移一位相当于乘2,32*2=64。
040(8)=32(10) // 八进制=》十进制
32 向左移一位 32*2=64
如果看不懂的话 知道怎么算了 也没用
八进制的40 是
0x100 000
左移一位就是
0x100 0000
就是64了
以0开头的数是八进制数,八进制数40化成二进制数是0010 0000,左移一位变成0100 0000即十进制的64
如果你对二进制不了解,可以化成十进制,040,即八进制数40,化成十进制数是32,左移一位,相当于乘以2,32*2,=64
还有什么不明白的吗?
输出结果:100
x=040(前缀0代表八进制),转化二进制即为 100 000
x<<1,左移一位,即 1 000 000
%o表示输出无符号八进制,再将其转为八进制,为 100(本应为0100,但打印语句不显示前缀0)
<<表示二进制的左移操作,即将二进制各位顺次向左移动一位。
则,二进制变为0100 0000,对应的十进制为64.
以0开头的数是八进制数,八进制数40化成二进制数是0010 0000,左移一位变成0100 0000即十进制的64
如果你对二进制不了解,可以化成十进制,040,即八进制数40,化成十进制数是32,左移一位,相当于乘以2,32*2,=64
还有什么不明白的吗?
040是八进制,十进制是32。
x=x<<1;表示把x左移一位赋给x,二进制左移一位相当于乘2,32*2=64。
040(8)=32(10) // 八进制=》十进制
32 向左移一位 32*2=64
如果看不懂的话 知道怎么算了 也没用
八进制的40 是
0x100 000
左移一位就是
0x100 0000
就是64了