C语言原码补码按位运算问题!
刚学新手什么都不懂,迷糊的。原码补码知道是什么都是一到转换原变补或补变原取反加一就蒙了,那个一怎么加的尤其是最后一位是1的+1后前面的就变0还是1蒙,,还有按位运算,IN...
刚学新手什么都不懂,迷糊的。原码补码知道是什么都是一到转换原变补或补变原取反加一就蒙了,那个一怎么加的尤其是最后一位是1的+1后前面的就变0还是1蒙,,还有按位运算,INT b=-20 . b>>3 我知道移几位除以二的几次方,但是它那个过程就是二进制都是1、0的那个变化过程,还有这个过程里这个b=-20是原码还是补码?运算时都要转成原还是补码运算,如果你转换出来了,是直接那个数?还是还要再转成原码或补码?求帮忙解释下,勿复制,勿链接我看了别人问的没明白,希望能好好解释下。
展开
展开全部
int类型一般是16位,比如1就是0000 0000 0000 0001,其中有符号数第一位是符号位,正是0,负是1;
-20转换为二进制按规则应该是 1000 0000 0001 0100;这个就是原码,但是计算机中不是这么存储的;
然后将符号位以外的这15位取反,得到,1111 1111 1110 1011;这个叫反码
之后再加上1,得到,1111 1111 1110 1100;这个是补码(计算机中存储的-20)
从一个二进制数反推回十进制,按相反的顺序计算即可.
位运算>>,就是向右位移一定位数,正数补0,负数补1;
所以-20>>3就是111 1111 1111 1110 1(左边补出3个1,右边的100丢失)
得到1111 1111 1111 1101,这个是补码,(计算机中的数)
减1得1111 1111 1111 1100,这个是反码;
取反得1000 0000 0000 0011,这个是原码;(方便我们识别的数)
也就是十进制的-3.
-20转换为二进制按规则应该是 1000 0000 0001 0100;这个就是原码,但是计算机中不是这么存储的;
然后将符号位以外的这15位取反,得到,1111 1111 1110 1011;这个叫反码
之后再加上1,得到,1111 1111 1110 1100;这个是补码(计算机中存储的-20)
从一个二进制数反推回十进制,按相反的顺序计算即可.
位运算>>,就是向右位移一定位数,正数补0,负数补1;
所以-20>>3就是111 1111 1111 1110 1(左边补出3个1,右边的100丢失)
得到1111 1111 1111 1101,这个是补码,(计算机中的数)
减1得1111 1111 1111 1100,这个是反码;
取反得1000 0000 0000 0011,这个是原码;(方便我们识别的数)
也就是十进制的-3.
展开全部
给你个网址看看吧。里面说的很清楚。搞清楚补码怎么回事关键搞清楚模的概念。
http://baike.baidu.com/link?url=sReMRO4jQJkgjkx5vttPg0DVBmRkveGqApreV-AGFOJ7qQum2yJAkQd4mWPUU92q
http://baike.baidu.com/link?url=sReMRO4jQJkgjkx5vttPg0DVBmRkveGqApreV-AGFOJ7qQum2yJAkQd4mWPUU92q
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询