A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-3-25 15:31  /  1828 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2进制,8进制,10进制,16进制,这些进制的负数表示形式不都是在数字前面加负号吗?
比如:十进制的-2,用各种进制表示:-0000 0010,-02,-2,-0x2  ,是这样的吗?
System.out.println(0x80000000),输出的这是个负数呀,那我想用16进制表示个-1怎么搞?用8进制、2进制又怎么搞?

5 个回复

倒序浏览
计算机正负数是由转换为二进制最高位确定的,比如说10000001,就是 -1,而00000001就是1.
回复 使用道具 举报
首先十进制可以用加-表示复数,其他的均不能
要求-1的二进制需要;
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码:     11111111 11111111 11111111 11111110
3、得补码:     11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF
八进制为177777

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
不是的,在进算计中  数字都是以补码的形式存在的   因为计算机不可以运算减法   而把负数变成相对应的补码  
    即一个整数的补码和一个负数的补码想加  相当于这个整数减去这个负数的绝对值
   在计算机中所有的运算都是以补码形式运算的  避免了一个数减去一个数的操作
  正数的 补码  就是这个正数   
而负数的补码  就是    除了符号位不变以为  其他的取反    然后在加1  就是负数的补码
回复 使用道具 举报
并不是全是补码,还有移码反码等,的确是全是加法运算,因为cpu内有个加法器,所以计算机的运算并不是想象中的相加相乘,而是累加计算。楼主的问题,要明确到二进制补码的表示,毕老师视频里没有讲到具体的,可以去网上查查资料。我们能想象到的所有符号在计算机里都是二进制数字。java里基本类型都是有正负区间,不存在正整型,所以第一位如果是1就代表是负数,0代表正数,负数用补码(上面同学介绍了),正数就正常表示就好。
回复 使用道具 举报
似乎有些懂了,我们给一个数负值,如int y=-4,这里可以加个负号,如果给他赋值个8进制或16进制的负数,是不能有负号的,也就说int y= -0xff  与y=-077是错误的,是吗?{:soso__108243756926991508_3:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马