Java 版 (精华区)
发信人: DreamWeaver (please input password), 信区: Java
标 题: [合集]每日一题:(1)奇妙的byte:1+1=0?
发信站: 哈工大紫丁香 (2002年08月15日19:32:26 星期四), 站内信件
────────────────────────────────────────
DreamWeaver (戴眼镜的臭丑流氓 @_@) 于 2002年08月13日09:15:35 星期二 说道:
编写一个控制台程序:定义一个类型为byte的变量,并且将
其初始化为1,然后再把它乘以2,显示得到的值,如此重复8次,
解释最终结果出现的原因。
两天(2002-08-15)后公布答案。
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月13日09:19:25 星期二 说道:
看你给闲的~!@~!@#
【 在 DreamWeaver (戴眼镜的臭丑流氓 @_@) 的大作中提到: 】
: 编写一个控制台程序:定义一个类型为byte的变量,并且将
: 其初始化为1,然后再把它乘以2,显示得到的值,如此重复8次,
: 解释最终结果出现的原因。
: 两天(2002-08-15)后公布答案。
────────────────────────────────────────
allen (夏夜晚风·原来的我) 于 2002年08月13日13:05:56 星期二 说道:
D:\Program\myself>java Ex01
b*2=2
b*2=4
b*2=8
b*2=16
b*2=32
b*2=64
b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
b*2=0 // -128*2 溢出了
不知道对不对
【 在 DreamWeaver (戴眼镜的臭丑流氓 @_@) 的大作中提到: 】
: 编写一个控制台程序:定义一个类型为byte的变量,并且将
: 其初始化为1,然后再把它乘以2,显示得到的值,如此重复8次,
: 解释最终结果出现的原因。
: 两天(2002-08-15)后公布答案。
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月13日14:23:30 星期二 说道:
clever boy
【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: D:\Program\myself>java Ex01
: b*2=2
: b*2=4
: b*2=8
: b*2=16
: b*2=32
: b*2=64
: b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
: b*2=0 // -128*2 溢出了
: 不知道对不对
────────────────────────────────────────
nalan (光荫) 于 2002年08月13日14:25:58 星期二 说道:
果然闲得不轻,呵呵
【 在 DreamWeaver (戴眼镜的臭丑流氓 @_@) 的大作中提到: 】
: 编写一个控制台程序:定义一个类型为byte的变量,并且将
: 其初始化为1,然后再把它乘以2,显示得到的值,如此重复8次,
: 解释最终结果出现的原因。
: 两天(2002-08-15)后公布答案。
────────────────────────────────────────
cocacola (紫丁香里●狂饮可乐) 于 2002年08月13日14:48:59 星期二 说道:
为什么我用b=b*2就说我精度错误
但是可以b*=2 没错
【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: D:\Program\myself>java Ex01
: b*2=2
: b*2=4
: b*2=8
: b*2=16
: b*2=32
: b*2=64
: b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
: b*2=0 // -128*2 溢出了
: 不知道对不对
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月13日15:41:17 星期二 说道:
【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: D:\Program\myself>java Ex01
: b*2=2
: b*2=4
: b*2=8
: b*2=16
: b*2=32
: b*2=64
: b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
详细说一下为什么是-128? hehe
: b*2=0 // -128*2 溢出了
: 不知道对不对
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月13日15:43:25 星期二 说道:
puke~~~~
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: : D:\Program\myself>java Ex01
: : b*2=2
: : b*2=4
: : b*2=8
: : b*2=16
: : b*2=32
: : b*2=64
: : b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月13日15:44:08 星期二 说道:
少来这套!有本事你说为什么??
【 在 elife (木木@找到真实的自己) 的大作中提到: 】
puke~~~~
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: : D:\Program\myself>java Ex01
: : b*2=2
: : b*2=4
: : b*2=8
: : b*2=16
: : b*2=32
: : b*2=64
: : b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月13日15:50:30 星期二 说道:
本来是64*2=128的
但是范围在-128---127之间
超过1,所以返回到第一位-128
is't it?
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 少来这套!有本事你说为什么??
: 【 在 elife (木木@找到真实的自己) 的大作中提到: 】
: puke~~~~
: 【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月13日15:53:33 星期二 说道:
那-128*2为什么等于零?
【 在 elife (木木@找到真实的自己) 的大作中提到: 】
: 本来是64*2=128的
: 但是范围在-128---127之间
: 超过1,所以返回到第一位-128
: is't it?
: 【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: : 少来这套!有本事你说为什么??
: : puke~~~~
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月13日15:55:36 星期二 说道:
go 1910
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 那-128*2为什么等于零?
: 【 在 elife (木木@找到真实的自己) 的大作中提到: 】
: : 本来是64*2=128的
: : 但是范围在-128---127之间
: : 超过1,所以返回到第一位-128
: : is't it?
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月13日16:01:12 星期二 说道:
哦,原来如此
你的意思是:
64*2=-128
是因为64*2应该等于128,但是byte类型的最大只能是127
所以这样
数轴:
-----------------------------------------------------------------→
...127,-128,-127,-126,.......125,126,127,-128,-127.....
~~~~~~~~~~~~~~~~~~~~~~~
是127的后一位,所以就是-128,对不?
【 在 elife (木木@找到真实的自己) 的大作中提到: 】
go 1910
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 那-128*2为什么等于零?
: 【 在 elife (木木@找到真实的自己) 的大作中提到: 】
: : 本来是64*2=128的
: : 但是范围在-128---127之间
: : 超过1,所以返回到第一位-128
: : is't it?
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月13日17:16:48 星期二 说道:
等elife回答此篇提问后就公布答案。
呵呵
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 哦,原来如此
: 你的意思是:
: 64*2=-128
: 是因为64*2应该等于128,但是byte类型的最大只能是127
: 所以这样
: 数轴:
: -----------------------------------------------------------------→
: ...127,-128,-127,-126,.......125,126,127,-128,-127.....
────────────────────────────────────────
allen (夏夜晚风·原来的我) 于 2002年08月13日17:20:54 星期二 说道:
byte是有符号数
范围:
0000 0000 --- 0
...
0111 1111 --- 127
1000 0000 --- -128
...
1111 1111 --- -1
64 * 2 = 0100 0000 <<1 = 1000 0000 = -128
对否?
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: : D:\Program\myself>java Ex01
: : b*2=2
: : b*2=4
: : b*2=8
: : b*2=16
: : b*2=32
: : b*2=64
: : b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日09:46:05 星期三 说道:
对形如 lhs op= rhs; 的表达式,如果rhs的类型与lhs的类型不同,
编译器会自动插入一个转型操作,这与普通赋值操作的处理方式完全
不同。
-------摘自 <Java2编程指南> 41页
在 cocacola (紫丁香里●狂饮可乐) 的大作中提到: 】
: 为什么我用b=b*2就说我精度错误
: 但是可以b*=2 没错
: 【 在 allen (夏夜晚风·原来的我) 的大作中提到: 】
: : D:\Program\myself>java Ex01
: : b*2=2
: : b*2=4
: : b*2=8
: : b*2=16
: : b*2=32
: : b*2=64
: : b*2=-128 //64*2=128, byte类型的变量一个字节,-128~127
────────────────────────────────────────
goldenleaf (** 流光飞舞 **) 于 2002年08月14日09:49:31 星期三 说道:
就保证程序的可靠性上来看,我还是习惯用普通的赋值语句。
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 对形如 lhs op= rhs; 的表达式,如果rhs的类型与lhs的类型不同,
: 编译器会自动插入一个转型操作,这与普通赋值操作的处理方式完全
: 不同。
: -------摘自 <Java2编程指南> 41页
: 在 cocacola (紫丁香里●狂饮可乐) 的大作中提到: 】
: : 为什么我用b=b*2就说我精度错误
────────────────────────────────────────
wishtree (机械工业出版社!跟你没完) 于 2002年08月14日10:00:23 星期三 说道:
编译器会自动插入一个转型操作!
那pipi的错在哪里呢?
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 对形如 lhs op= rhs; 的表达式,如果rhs的类型与lhs的类型不同,
: 编译器会自动插入一个转型操作,这与普通赋值操作的处理方式完全
: 不同。
: -------摘自 <Java2编程指南> 41页
: 在 cocacola (紫丁香里●狂饮可乐) 的大作中提到: 】
: : 为什么我用b=b*2就说我精度错误
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日10:08:59 星期三 说道:
────────────────────────────────────────
cocacola (紫丁香里●狂饮可乐) 于 2002年08月13日14:48:59 星期二 说道:
为什么我用b=b*2就说我精度错误
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个没有自动转型,所以错误
但是可以b*=2 没错
~~~~~~~~~~~~~~~~~~~~~~这个有自动转型,所以通过
【 在 wishtree (机械工业出版社!跟你没完) 的大作中提到: 】
: 编译器会自动插入一个转型操作!
: 那pipi的错在哪里呢?
: 【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: : 对形如 lhs op= rhs; 的表达式,如果rhs的类型与lhs的类型不同,
: : 编译器会自动插入一个转型操作,这与普通赋值操作的处理方式完全
: : 不同。
: : -------摘自 <Java2编程指南> 41页
────────────────────────────────────────
cocacola (紫丁香里●狂饮可乐) 于 2002年08月14日13:23:47 星期三 说道:
原来如此
b=b+b 为什么也是错误呢?
如果这样的话 那么short byte类型的变量进行数学计算 不是很不好用么
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
────────────────────────────────────────
cocacola (紫丁香里●狂饮可乐) 于 : 标 题: Re: 每日一题:(1)奇妙的byte:1+1=0?
: 发信站: 哈工大紫丁香 (2002年08月13日14:48:59 星期二), 站内信件
: 为什么我用b=b*2就说我精度错误
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个没有自动转型,所以错误
: 但是可以b*=2 没错
: ~~~~~~~~~~~~~~~~~~~~~~这个有自动转型,所以通过
: 【 在 wishtree (机械工业出版社!跟你没完) 的大作中提到: 】
: : 编译器会自动插入一个转型操作!
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日14:58:38 星期三 说道:
byte b=1;
b=b+0;
这也是错的,原因已经说得很清楚了
【 在 cocacola (紫丁香里●狂饮可乐) 的大作中提到: 】
: 原来如此
: b=b+b 为什么也是错误呢?
: 如果这样的话 那么short byte类型的变量进行数学计算 不是很不好用么
: 【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
────────────────────────────────────────
cocacola (紫丁香里●狂饮可乐) 于 : : 标 题: Re: 每日一题:(1)奇妙的byte:1+1=0?
: : 发信站: 哈工大紫丁香 (2002年08月13日14:48:59 星期二), 站内信件
: : 为什么我用b=b*2就说我精度错误
: : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个没有自动转型,所以错误
: : 但是可以b*=2 没错
: : ~~~~~~~~~~~~~~~~~~~~~~这个有自动转型,所以通过
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:209.923毫秒