main() { char x=040; printf("%d\n",x=x<<1);} 答案是 64 大神最好把原因说下 菜鸟求

作者&投稿:茹狠 (若有异议请与网页底部的电邮联系)
main() { char x=040; printf("%d\n",x=x<<1);} 答案是 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)

x =040,为八进制的表示,其二进制形式为:00100 000
<<表示二进制的左移操作,即将二进制各位顺次向左移动一位。
则,二进制变为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了