c语言求解答案为什么是-64?
8个回答
展开全部
int a = 077 ;//以0开头的是八进制。所以77(8) = 63(10),用计算器可以算出来,十六进制 0x3F
~a的值得,就是按位取反。结果就是2的32次方减去63。结果就是0xFFFFFFC0,这只是二进制的实际值,因为最高位为1,所以如果这个二进制代表的是整数int的话,就应该为负数。
printf中 %d 表示将4个字节的0xFFFFFFC0按int输出,按int输出就是-64
如果按%u输出就是4294967232
同样的内存的数据,用不同的类型来解析,可能得到的结果不一样。所以打印出来的只是表象,一定要抓住内存当中实际的存放的二进制数据是什么。
此题考查知识点
八进制
位运算
补码表示法
printf的格式控制符的准确含义
展开全部
077是八进制数,a实际上是63。按位取反后,符号位变为负,再加上数值部分,用%d打印就是-64。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在c语言中,凡是用零开头的,一般都为8进制数列。你可以先把077转化成二进制0011 1111,然后取反,然后再以十进制的结果显示出来。
下面一个哥们的问题和你是一样的,你可以看看。
http://zhidao.baidu.com/link?url=0gv4KuLzRgXisg1J9DiuoAvDooQWhKsyVuk_rKlA9Fyz0WLawTgqpWQ0LtOzmU68wRkqO9XM7kmZxJMXdsDS2q
下面一个哥们的问题和你是一样的,你可以看看。
http://zhidao.baidu.com/link?url=0gv4KuLzRgXisg1J9DiuoAvDooQWhKsyVuk_rKlA9Fyz0WLawTgqpWQ0LtOzmU68wRkqO9XM7kmZxJMXdsDS2q
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a的二进制00111111
~a后是11000000
二进制转成十进制最高位1代表负数,计算1乘2的6次方,结果-64
~a后是11000000
二进制转成十进制最高位1代表负数,计算1乘2的6次方,结果-64
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a = 077,是8进制表示法,实际上a =63,63转成二 进制为:111111,32位取返为:1111111111.....000000,相当于-64
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询