黑马程序员技术交流社区

标题: 关于进制的一个小问题 [打印本页]

作者: 戴振良    时间: 2012-3-25 15:31
标题: 关于进制的一个小问题
2进制,8进制,10进制,16进制,这些进制的负数表示形式不都是在数字前面加负号吗?
比如:十进制的-2,用各种进制表示:-0000 0010,-02,-2,-0x2  ,是这样的吗?
System.out.println(0x80000000),输出的这是个负数呀,那我想用16进制表示个-1怎么搞?用8进制、2进制又怎么搞?
作者: 李见黎    时间: 2012-3-25 15:49
计算机正负数是由转换为二进制最高位确定的,比如说10000001,就是 -1,而00000001就是1.
作者: 朱鹏举    时间: 2012-3-25 16:04
首先十进制可以用加-表示复数,其他的均不能
要求-1的二进制需要;
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码:     11111111 11111111 11111111 11111110
3、得补码:     11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF
八进制为177777
作者: 贠(yun)靖    时间: 2012-3-25 16:50
不是的,在进算计中  数字都是以补码的形式存在的   因为计算机不可以运算减法   而把负数变成相对应的补码  
    即一个整数的补码和一个负数的补码想加  相当于这个整数减去这个负数的绝对值
   在计算机中所有的运算都是以补码形式运算的  避免了一个数减去一个数的操作
  正数的 补码  就是这个正数   
而负数的补码  就是    除了符号位不变以为  其他的取反    然后在加1  就是负数的补码
作者: 马强    时间: 2012-3-25 18:51
并不是全是补码,还有移码反码等,的确是全是加法运算,因为cpu内有个加法器,所以计算机的运算并不是想象中的相加相乘,而是累加计算。楼主的问题,要明确到二进制补码的表示,毕老师视频里没有讲到具体的,可以去网上查查资料。我们能想象到的所有符号在计算机里都是二进制数字。java里基本类型都是有正负区间,不存在正整型,所以第一位如果是1就代表是负数,0代表正数,负数用补码(上面同学介绍了),正数就正常表示就好。
作者: 戴振良    时间: 2012-3-27 17:40
似乎有些懂了,我们给一个数负值,如int y=-4,这里可以加个负号,如果给他赋值个8进制或16进制的负数,是不能有负号的,也就说int y= -0xff  与y=-077是错误的,是吗?{:soso__108243756926991508_3:}




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