int a=12; a=a&0377; printf(“%o\n”,a); 怎么算

int a=1234; a=a&0377; printf(“%d %o\n”,a,a); 输出为14
0377为8进制 转为二进制为11111111
a 是等于12 , 还是是16进制的a , 还是a要换成2进制, 我都乱了。。。 为什么要换成2进制的补码而不是源码?? 求大神,有点乱
int a=12; a=a&0377; printf(“%d %o\n”,a,a); a是等于12 该怎么算

第1个回答  2014-12-16
计算机里整数都是按补码存储,整数之间的四则运算也是以补码形式参与运算,这是个规定,为什么用补码,肯定是因为补码比原码好。不然很久以前那些搞计算机的专家也不会用补码。你看到的a=1234,八进制的0377,都是你看到的一种数的表现形式,方便人类阅读。但是对于数字计算机只认二进制补码。。你要分清楚是你看,还是计算机看。针对这道题这是计算机运算,当然要转化成补码。1234是十进制形式的。0x开头的是十六进制表示的数值,0开头的是八进制表示的数值。很好认追问

具体怎么算啊

追答

a=1234 变成二进制的补码形式:10011010010
八进制0377 是十进制的255变成二进制的补码形式:00011111111(不足的前面补0)
&代表与,即参加运算的2位都是1才是1,其他都是0。结果是00011010010,转化成十进制:210

本回答被提问者采纳
第2个回答  2014-12-16
正数没有区别,补码就是原码!