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毫秒