黑马程序员技术交流社区
标题:
负数二进制的疑惑
[打印本页]
作者:
周建
时间:
2012-3-19 12:54
标题:
负数二进制的疑惑
byte a=-1,b=255;a和b的2进制都是11111111;在2进制的取反课程中说,首位为1的是负数,那么255的2进制又要怎么表示,虚心求教,那位高手能指点一下啊
作者:
小白
时间:
2012-3-19 13:15
255的二进制表示00000000 00000000 00000000 11111111
作者:
葛尧
时间:
2012-3-19 13:17
java里面没无符号数,所以byte 一字节的范围是 -128~127
最高有效位以补码表示
在这里11111111 就是 -1了
255是正数 最高有效位应该是0 所以byte里面是存不下的
作者:
李创
时间:
2012-3-19 13:54
1.二进制的最高位是符号位,0表示正数,1表示负数
2.正数的原码,反码,补码都一样
3.负数的反码=它的原码符号位不变,其它位取反
4.负数的补码=它的反码+1
5.零的反码,补码都是0
6.位运算都是用补码进行运算
-1
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111
255
原码反码补码相同
0000 0000 0000 0000 0000 0000 1111 1111
补码对应的就是二进制
按这个规律二进制就不会错了
作者:
黄长利
时间:
2012-3-19 14:01
首先byte类型的数据是一个字节,8位二进制大小,范围是在-128~127之间,是存放不了255的
而负数的二进制表示是由该负数去掉负号之后取反加1得到,则用byte声明-1,表示为二进制是 11111111,
而你定义255时,只能用 short 或者 int 等表示范围更大的,例如用 int 来声明 255,是4个字节也就是32位二进制数表示,即是:00000000 00000000 00000000 11111111,一般来说我们写出来是省略前面的0不写的,但是在计算机的内存中是有着前面的0的
作者:
周建
时间:
2012-3-19 15:09
谢谢各位,我明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2