关于C语言的位运算~的问题,求助!
#include<stdio.h>intmain(){intx=11,y;y=~x;printf("%d",y);return0;}x00001101y11110010为...
#include<stdio.h>
int main()
{
int x=11,y;
y=~x;
printf("%d",y);
return 0;
}
x 00001101
y 11110010
为什么输出y是-14??~是取补码,对应10进制是怎么对应的??
求助大神!!!! 展开
int main()
{
int x=11,y;
y=~x;
printf("%d",y);
return 0;
}
x 00001101
y 11110010
为什么输出y是-14??~是取补码,对应10进制是怎么对应的??
求助大神!!!! 展开
3个回答
展开全部
int里第一位是符号位,0代表正数,代表负数。并且正数用原码储存,负数用补码储存(这样做是能将二进制加法与减法统一,自己悟一下,很高明的方法)。11110010 第一位是1 所以是负数,所以是补码。补码转原码要取反加一(除了符号位),所以取反10001101。再加一10001110 就是-14了。手机打字,希望你能理解。具体的搜索关键字补码来学习就行。望采纳
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x = 11 -> 0000 1011
~x -> 1111 0100
负数以补码方式存储的,要换算成十进制,先把1111 0100取反(除开符号位),再加1,这时为1000 1100 (1000 1011 + 1),为-12。
大概是这样,你再具体查下补码
~x -> 1111 0100
负数以补码方式存储的,要换算成十进制,先把1111 0100取反(除开符号位),再加1,这时为1000 1100 (1000 1011 + 1),为-12。
大概是这样,你再具体查下补码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一,输出的是-12
第二,~是二进制取反,不是取补码
第二,~是二进制取反,不是取补码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询