黑马程序员技术交流社区
标题:
关于进制的一个小问题
[打印本页]
作者:
戴振良
时间:
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