黑马程序员技术交流社区

标题: 各位大神,JAVA的负数二进制怎样算成10进制 [打印本页]

作者: lovefmylgs    时间: 2014-4-30 23:57
标题: 各位大神,JAVA的负数二进制怎样算成10进制
if()//你知道答案请回复{}

else{
}//给技术分,我正数二进制我会算,负数我就不会算了,0基础,准备来10期JAVA云


作者: thinkervsruler    时间: 2014-5-2 11:42
负数二进制位减1再取反,形成正数的二进制数,再求得对应的十进制数,最后添加负号即可
作者: thinkervsruler    时间: 2014-5-2 11:44
:lol哥们,我也在准备报云10期,一起努力啊
作者: lovefmylgs    时间: 2014-5-2 13:57
thinkervsruler 发表于 2014-5-2 11:44
哥们,我也在准备报云10期,一起努力啊

你基础提提交了没有
作者: lovefmylgs    时间: 2014-5-2 13:58
lovefmylgs 发表于 2014-5-2 13:57
你基础提提交了没有

我感觉进去有的为难
作者: thinkervsruler    时间: 2014-5-3 01:00
lovefmylgs 发表于 2014-5-2 13:57
你基础提提交了没有

基础测试过了,现在第三步自学阶段
作者: thinkervsruler    时间: 2014-5-3 01:01
lovefmylgs 发表于 2014-5-2 13:58
我感觉进去有的为难

:lo努力学习,加油
作者: bansy_chen    时间: 2015-3-26 21:47
一楼说的对啊
作者: natsu647    时间: 2015-3-27 09:54
二进制数中,正数转负数,负数转正数,方法都是 : 反码 再加1 ;
所以你转成正数,换算成十进制,再加上负号就行了。
作者: 小邱    时间: 2015-3-27 12:40
本帖最后由 小邱 于 2015-3-27 12:43 编辑

class change{
        static int x=-553;
       
        public static void main(String[] args){
                s(x);
        }
        public static void s(int x){
                int y=~(x-1);//整数变负数是:取反加1,那么负数变整数就反过来,减1取反
                //int k=(x-1)^(-1);
                System.out.print(y);
        }
}

作者: DK_bai    时间: 2015-4-1 09:48
毕老师的java基础视频异或那节有讲
作者: q8387811    时间: 2015-4-22 20:21
一起学习。。。。
作者: frankzheng329    时间: 2015-4-27 23:36
正数->负数 取反加一
负数->证书 减一取反
然后在从二进制到十进制
作者: yangdingzhi    时间: 2015-5-5 21:34
啃视频!哈哈
作者: 热火程序猿    时间: 2015-5-11 20:00
减一取反
作者: xxz    时间: 2015-5-27 06:23
减一取反,再转换成10进制
作者: jife94    时间: 2015-6-9 14:27
补码啊啊啊啊啊啊啊啊啊啊?
作者: wenxueaaa555    时间: 2015-6-14 22:44
负数就是最高位为1,然后就把去掉-后的数转为二进制,与正数一样
作者: GUO18735177413    时间: 2015-6-20 11:23
我感觉这个可以用无符号右移实现,你可以试试。新手勿笑。多多指教。
作者: GUO18735177413    时间: 2015-6-20 11:26
不好意思,发错了。我感觉这个可以用无符号左移实现,你可以试试。新手勿笑。多多指教。
作者: liming_heima    时间: 2015-6-21 14:52
我也只会整数的了,同问。
作者: luorenyu    时间: 2015-6-26 14:02
标题: java的负数二进制如何转换成十进制
本帖最后由 luorenyu 于 2015-6-26 14:05 编辑

第一步:现将负转换成正二进制
第二步:再讲正二进制转化成十进制
例如数字:-6
-6的负二进制数为:
1111-1111  1111-1111  1111-1111  1111-1010
接下来我们先减一个二进制的1
1111-1111  1111-1111  1111-1111  1111-1010
0000-0000  0000-0000  0000-0000  0000-0001
用上面一排的减去下面一排的最后得到
1111-1111  1111-1111  1111-1111  1111-1001
再将这个数字取反(即将0变为1,将1变为0)最后得到了:
0000-0000  0000-0000  0000-0000  0000-0110
最后将二进制的110转换为十进制
得到了1*2(2)+1*2(1)+1*2(0)=6
注:口号内表示2的指数
我也是新手愿与君共勉

作者: luorenyu    时间: 2015-6-26 14:06
第一步:现将负转换成正二进制
第二步:再讲正二进制转化成十进制
例如数字:-6
-6的负二进制数为:
1111-1111  1111-1111  1111-1111  1111-1010
接下来我们先减一个二进制的1
1111-1111  1111-1111  1111-1111  1111-1010
0000-0000  0000-0000  0000-0000  0000-0001
用上面一排的减去下面一排的最后得到
1111-1111  1111-1111  1111-1111  1111-1001
再将这个数字取反(即将0变为1,将1变为0)最后得到了:
0000-0000  0000-0000  0000-0000  0000-0110
最后将二进制的110转换为十进制
得到了1*2(2)+1*2(1)+1*2(0)=6
注:口号内表示2的指数
我也是新手愿与君共勉
作者: 小蜗牛0519    时间: 2015-7-17 21:30
顶一个!!!
作者: lz895192176    时间: 2015-7-30 10:48
class ArrayTest7
{
        public static void main(String[] args)
        {
                toBin(-6);
                System.out.println();
                toOc(8);
                System.out.println();
                toHex(60);
        }
        /*
        十进制-->二进制
        */
        public static void toBin(int num)
        {
                trans(num,1,1);
        }

        /*
        十进制-->八进制
        */
        public static void toOc(int num)
        {
                trans(num,7,3);
        }

        /*
        十进制-->十六进制
        */
        public static void toHex(int num)
        {
                trans(num,15,4);
        }

        public static void trans(int num,int base,int offset)
        {
                if(num==0)
                {
                        System.out.print(0);
                        return;
                }
                char[] chs = {  '0','1','2','3',
                                                '4','5','6','7',
                                                '8','9','A','B',
                                                'C','D','E','F',};
                char[] arr = new char[32];

                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num & base;
                        arr[--pos] = chs[temp];
                        num = num >>> offset;
                }

                for(int x=pos; x<arr.length; x++)
                {
                        System.out.print(arr[x]);
                }
        }
}


作者: lz895192176    时间: 2015-7-30 10:49
class ArrayTest7
{
        public static void main(String[] args)
        {
                toBin(-6);
                System.out.println();
                toOc(8);
                System.out.println();
                toHex(60);
        }
        /*
        十进制-->二进制
        */
        public static void toBin(int num)
        {
                trans(num,1,1);
        }

        /*
        十进制-->八进制
        */
        public static void toOc(int num)
        {
                trans(num,7,3);
        }

        /*
        十进制-->十六进制
        */
        public static void toHex(int num)
        {
                trans(num,15,4);
        }

        public static void trans(int num,int base,int offset)
        {
                if(num==0)
                {
                        System.out.print(0);
                        return;
                }
                char[] chs = {  '0','1','2','3',
                                                '4','5','6','7',
                                                '8','9','A','B',
                                                'C','D','E','F',};
                char[] arr = new char[32];

                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num & base;
                        arr[--pos] = chs[temp];
                        num = num >>> offset;
                }

                for(int x=pos; x<arr.length; x++)
                {
                        System.out.print(arr[x]);
                }
        }
}



作者: 比尔盖子    时间: 2015-8-3 23:55
减一取反,再转换成10进制
作者: 黑色幽默K    时间: 2015-8-7 21:17
....................
作者: 黄胖胖    时间: 2015-8-29 10:02
负数二进制就是整数二进制取反再加一。
作者: 黄胖胖    时间: 2015-8-29 10:08
    0000-0000 0000-0000 0000-0000 0000-0110     6的二进制
    1111-1111 1111-1111 1111-1111 1111-1001     取反
+  0000-0000 0000-0000 0000-0000 0000-0001
-------------------------------------------------------


作者: 黄胖胖    时间: 2015-8-29 10:10
结果就是1111-1111 1111-1111 1111-1111 1111-1010



作者: hutudan1993    时间: 2015-8-31 09:18
减一,再取反
作者: Itheima_yuan    时间: 2015-9-2 20:58
thinkervsruler 发表于 2014-5-3 01:00
基础测试过了,现在第三步自学阶段

那技术分怎么来的啊?求指导一下,好赞点技术分
作者: 爱在离别时    时间: 2015-9-3 12:36
取反加一,一切ok
作者: 楠楠    时间: 2015-9-3 13:08
减一取反
作者: cuifei    时间: 2015-9-5 23:26
希望能帮到你,在二进制中,正数变负数,负数变正数  反码 +1;转换成正数,转换成十进制,再加上负号就行了。


来黑马,这些问题都是so easy
作者: 钟先明    时间: 2015-9-20 16:12
负数二进制位减1再取反,形成正数的二进制数,再求得对应的十进制数,最后添加负号即可
作者: 朦胧色彩    时间: 2015-9-20 21:39
先说一下 十进制的负数怎么转成二进制 ,比如 -6 如果转成二进制
首先,求出6的二进制数,用一个8位表示就是 00000110
然后,对00000110取反就是:11111001
最后,用11111001做加1操作,得到11111010,这就是-6的二进制表示形式。
这样,把11111010转成十进制就简单啦 , 其实就是倒过来嘛
先用11111010做减1的操作,得到11111001,然后对11111001做取反就是00000110,最后为方便起见,取右边的有效部分110,转成十进制就是1*2^2+1*2^1+0*2^0 = 4 + 2 + 0 = 6,因为是负的二进制,那么结果是-6。
希望可以帮到你!
作者: Arron    时间: 2015-9-23 22:18
把负数的图画出来   接着-1  再取反   得到整数 再算出整数,前面加负号.
作者: 浅滩    时间: 2015-9-30 09:08
负数转化整数减一取反,整数转化负数加一取反
作者: Arron    时间: 2015-10-2 23:18
负数很简单呀  负数的补码变成正数的补码 就是取反再加1呀!!~
作者: 神马才是黑马    时间: 2015-10-3 23:50
负数二进制位减1再取反,形成正数的二进制数,再求得对应的十进制数,最后添加负号
作者: tuyrt7    时间: 2015-10-16 22:39
看这些解答还是能加深理解的。。。。。
作者: hdhdhd    时间: 2015-10-18 16:39
哥们过了没,现在轮到我第三阶段了。
作者: 洛克先生EN    时间: 2015-10-18 23:59
这个开发中会用得到么?
作者: 杨忠磊    时间: 2015-10-19 10:12
看不懂的说,还得努力啊,仰望中
作者: 叶发伟    时间: 2015-10-20 17:09
减一取反
作者: Phoenix_Szp    时间: 2015-10-29 10:20
负数反码的补码是正二进制,正几就是负几了
作者: 百变乔巴    时间: 2015-10-29 21:58
计算机底层计算的时候都是用二进制计算的,进制转换一样。整数的计算的时候直接用原码计算就好,因为正数原反补码都一样,但是负数要先求补码,因为计算都是二进制的补码计算。负数反码是先符号位不变,其余未知取反,然后再加一,就得到了负数二进制的补码,单然后就可以用补码计算转换了。
作者: newbee    时间: 2015-11-3 15:34
计算机中带符号的类型所表示的最大数要比无符号的 来的小。(少了一个byte位)
在二进制中 是以第一个byte来表示符号的。

计算机中负数与对应的整数 的二进制表示 的和 是 0
如:-1 :1111111111111111
       +1  :   000000000000001
                ——————————
                   000000000000000
转化规则:一个数 x 对应的 -x的二进制为 对x的二进制取反 +1
如 -1 :
取反:000000000000000
+1:     000000000000001
负数转成相应的十进制:应该先转化成对应的正数 然后将所得的正数 转化为 十进制 最后添上负号
作者: 我若为神    时间: 2015-11-8 22:19
66666666666
作者: lihang3545    时间: 2015-11-9 22:43
加油,支持顶一下..
作者: 强子_Y528o    时间: 2015-11-11 09:47
整数变负数是:取反加1,那么负数变整数就反过来,减1取反,符号位不变
作者: HavaDream    时间: 2015-11-11 19:07
与正数二进制算法一样,只是前面的符号位是1(负数)
作者: flybeifeng    时间: 2015-11-12 21:54
围观一下~~~~
作者: ^_^笨和尚^_^    时间: 2015-11-12 23:39
共勉~~~黑马
作者: 陈同英    时间: 2015-11-21 00:05
赞一个~赞一个~赞一个~赞一个~
作者: 崔节帅    时间: 2015-11-22 20:31
大家一起加油啊
作者: 秋alin    时间: 2015-12-3 22:03
好像要倒过来,加负号还是怎么的,我也忘了0.0
作者: 阳光下的枫叶    时间: 2015-12-12 00:16
这个行业就不断学习的过程,新的技术出来一方面是给我们带来新奇的体验感受,另一方面是要求开发者不断是学习适应,做出的东西真的是足够便利吸引人。要学习的东西很多,大好基础,不断学习。
作者: 意念痴心灬戒贪    时间: 2015-12-12 22:51
先把负数二进制转换成正数二进制在计算
作者: 意念痴心灬戒贪    时间: 2015-12-12 22:53
先把数转换成正数二进制数,然后在转化成十进制的数  ,再加符号。
作者: qinrongchang    时间: 2015-12-27 09:58
计算机运算的时候是按照补码运算的,也就是说补码和补码运算得到的也是补码 整数的补码就是源码不需要转换,而负数的补码不是源码,需要进行运算也就是减一取反 得到源码 源码的值就是咱们能看懂的二进制数了,不知道你懂了没有。
作者: Garnet92    时间: 2015-12-28 18:33
你的这个问题好低级哦,看视频去
作者: wangjianfeng    时间: 2016-1-10 15:55
底层都是用补码来计算的,可以将二进制转换成补码,看下都是怎么实现的.新手回答,勿喷
作者: PeterPang    时间: 2016-1-15 00:16
原反补呵呵
作者: ma464526717    时间: 2016-2-4 09:05
符号位去除,使用8421码,转成十进制,然后再加上负数。
作者: 15266913109    时间: 2016-2-11 11:49
我来混个黑马币
作者: liuyuttkx    时间: 2016-2-29 23:52
十进制负数转换为二进制的方法为: 1、将十进制转换为二进制数。 2、对该二进制数求反。 3、再将该二进制数加1. 总之就是将十进制数转换为二进制数求补码即为结果。比如: -32 第一步:32(10)=00100000(2) 第二步:求反:11011111 第三步:加1:11100000 所以-32(10)=11100000(2)
作者: balalaikasen    时间: 2016-3-2 13:12
去除符号位后正常运算,结果前再加上符号就对了
作者: wx_Jje8DDdi    时间: 2016-3-6 20:15
对于二进制换算成十进制,一般这个二进制数是byte型的即8个二进制位;负数的byte类型,最高位是符号位,为1,其他位是数值为,换算成十进制时,最高位不参与运算;换算时按照数值位8421码的规律进行换算即可。
作者: wx_Jje8DDdi    时间: 2016-3-6 20:16
对于二进制换算成十进制,一般这个二进制数是byte型的即8个二进制位;负数的byte类型,最高位是符号位,为1,其他位是数值为,换算成十进制时,最高位不参与运算;换算时按照数值位8421码的规律进行换算即可。
作者: wx_Jje8DDdi    时间: 2016-3-6 20:21
对于二进制换算成十进制,一般这个二进制数是byte型的即8个二进制位;负数的byte类型,最高位是符号位,为1,其他位是数值位,换算成十进制时,最高位不参与运算,数值位按照8421码的规律进行换算即可。各个数值位对应的十进制数按从左到右依次是(64 ,32 ,16, 8,4,2,1),将个位上的数乘以相应的十进制相加的结果(为正)取其相反数即可。
作者: jeremylee    时间: 2016-3-15 23:13
比如 -1吧  减一取反
-1的二进制  10000 0000 0000 0000  0000 0000 0000 0001
   减 1           0000  0000 0000  0000  0000  0000 0000  0001
等于           1000  0000 0000  0000  0000  0000 0000  0000    负数的第一位不参与运算
取反            0000  0000 0000  0000  0000  0000 0000  0000
可能回答的不到位 但大概就是这样的  一般简单算的话就是 -1 或者-2 的话    +1 取反    -1 为 0     -2的取反就是1
作者: feng9639    时间: 2016-3-17 09:02
这个进制转换大致的了解下转换原理就行, 毕竟有计算器帮忙.
懂的怎么用就行.
作者: 光阴似箭    时间: 2016-3-18 12:24
减一在取反。跟负数反正来
作者: zhaoxiaoting    时间: 2016-3-22 22:39
二进制刚学完
作者: 唯爱唐嫣    时间: 2016-3-24 23:01
负数时数的二进制减一再取反,然后转换成十进制数,再加个负号
作者: yoomii    时间: 2016-3-26 22:24
牛呀,学习了,受教了。
作者: yoomii    时间: 2016-3-26 22:30
牛呀,学习了,受教了。
作者: w310822336    时间: 2016-3-29 14:03
正数 三码合一
负数 反码取反  补码+1
作者: zgb296    时间: 2017-11-9 15:42

感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2