发表评论
博主对了。自动转换一般从低的往高的转换,所以第一个会报错。
另外++的过程是
type & operator ++(int);
type & operator +=(int);
--引用--------------------------------------------------
zeus2: 另外++的过程是
type & operator ++(int);
type & operator +=(int);
--------------------------------------------------------
小弟才疏学浅,没明白您的意思.详细给解释一下好么?
#5楼 [
楼主]2007-11-28 15:39 |
@Cure
没有弹出窗口呀。是不是你点了什么链接
我是有google的广告-_-,不过不点的话应该不会弹出的呀,我是IE6
两个short相加直接赋值给short也会报错的.
clr只支持int , native int , int64, float 进行四则运算.
堆栈里面的数字最小也是4字节的.
#9楼 [
楼主]2007-11-28 15:49 |
--引用--------------------------------------------------
zeus2: 另外++的过程是
type & operator ++(int);
type & operator +=(int);
--------------------------------------------------------
这个一般是C++中操作符重载的时候用的
short在c#中对应struct 的 Int16类型的,属于基础类型的
Dim s As Short = 0S
s = s + 1S
有弹出窗口,我是在firefox下.
这种面试题有什么意义,写代码的时候看见编译错误改了不就ok了.就算会这种几角旮旯的东西就能编好软件?
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
short z = x + y; // Error: no conversion from int to short
若要解决此问题,请使用强制转换:
short z = ( short )(x + y); // OK: explicit conversion
但是,在目标变量具有相同或更大的存储大小时,使用下列语句是可能的:
#16楼 [
楼主]2007-11-28 15:56 |
@路西菲尔
我也是认为这种面试题没什么意思的
#18楼 [
楼主]2007-11-28 15:57 |
@S.Sams
关于弹出窗口的问题,请不要再发表评论了
可能是浏览器或者什么其他问题导致的,我用的IE6是没有弹出的
请大家多多讨论:为什么 s+=1 是可以的
谢谢
s + 1, 双操作数运算, 把扩展成大的类型.
+= 是单操作数. 不用扩展
在C++里, += 是操作重写
就像 s = 1可以编译通过一样,+=运算符可以自动识别右边的字面常量是否可以安全地转换为short。如果右边不是字面常量无论=还是+=都不可以的。
PS.我认为弹出广告的行为还是要严厉批评的,大家好不容易有个讨论的空间。
@装配脑袋
我也是痛恨弹出窗口的行为的
我冤枉呀,我的IE6是没有弹出的,我在检查一下
读操作数的位置时就有区别了,s+=1编译器只要对左边的s读就行了,而s=s+1是左右的s都要读的,编译器不知道两个s是一样的,所以说效率会不一样的.
--引用--------------------------------------------------
GSpring: @S.Sams <br />
<strong>关于弹出窗口的问题,请不要再发表评论了<img src="/CuteSoft_Client/CuteEditor/images/emteeth.gif" align="absMiddle" border="0" alt="" /><br />
可能是浏览器或者什么其他问题导致的,我用的IE6是没有弹出的<br />
<br />
请大家多多讨论:为什么 s+=1 是可以的</strong> <br />
<br />
<strong>谢谢</strong>
--------------------------------------------------------
敢做还不许人说?真是“没牙”哦!
博客园里你是第二个挂弹窗的,另外一个人至少他博客里有“弹窗联盟”几个红字提醒,也不往首页发文章。
不要再弹窗了,不然我让你在所挂的弹窗联盟里被列入“作弊黑名单”。
我感觉考这个没啥用.....
虽说是考基础知识吧,虽然在VS里报错,但我感觉这个不算语法错误的.1也可以是short型嘛.
不知道出这道题的人怎么想的,我觉得,没有人会把整个C#完完全全的明白。专精的只是某个部分。如果刚好考的不是专精的部分,那么,对于企业来说是个损失。
“就像 s = 1可以编译通过一样,+=运算符可以自动识别右边的字面常量是否可以安全地转换为short。如果右边不是字面常量无论=还是+=都不可以的。
”
这句话好像道出了真正原因
我用FF, 有弹出窗口
这个问题很简单, C#如此定义的而已
s = s + 1 包括两个运算符, +和=, short + int 返回 integer, 再符给short,报错,
s+= 1 只有一个运算符, C#并不是把+=转化到+和=实现的,当然不会有这个问题。
另外,强烈鄙视弹窗行为
LS的解释是不对的,只有+=照样可以编译错误:
int i = 0;
short s = 0;
s += i; //编译错误
@装配脑袋
我在想,这里的编译错误可能源于 .net 担心万一 s = 65535...再加上 1,不就溢出了?
刚为了装vs2008重装的系统呀,千万别整个病毒啊晕...
有时觉得面试的人都几无聊的,我也碰到过,好像专门想为难人的,实际用得多的东西不去问下,偏偏问些很不常见的东西,这种公司我觉得进了也没有多大用处呵呵
无知就是无知,有的人却偏偏会去为无知找很多理由
差之毫厘,失之千里
如果控制宇宙飞船的系统,其中有一个小数点错误,那将怎样?
企业不是学校..
demo和“产品”仅仅是名字之差吗?
面试的人都无聊?那他面试你的目的是什么?
很简单的逻辑,都不明白。凭什么相信你能写更复杂的程序。
很多时候细节决定成败
#53楼 [
楼主]2007-11-29 09:15 |
首先对于弹出广告的问题,向各位表示歉意
不过前面也说过我也是痛恨弹出广告的,主观上我并不想弹出广告的。
我以前一直用IE6是没有弹出的,今天装了FF,确实会弹出
http://pagead2.googlesyndication.com,后来我在管理-〉选项里面把"博客园广告(左下角)"的去掉之后就好了,这个好像是博客园的问题的
然后我也把原来左上角的google广告也去掉了
请各位朋友再帮忙看看,如果有弹出广告的请告诉我:
所用浏览器,弹出窗口的url
谢谢
--引用--------------------------------------------------
大口仔: 有时觉得面试的人都几无聊的,我也碰到过,好像专门想为难人的,实际用得多的东西不去问下,偏偏问些很不常见的东西,这种公司我觉得进了也没有多大用处呵呵
--------------------------------------------------------
不会就是不会
小地方搞不清楚,只能说基础不好
不会!!!但就这个问题,我不觉得会影响我的开发、设计。。。
也许当作面试题列出来,很多人好像都会,但是真正做的时候,不见得就注意到这个问题了。。。实际上我个人认为这种面试题没有太大的意义。。
我直接做这道题,就得交白卷...
PS:Maxthon没有弹出广告,完毕
这种题一点意义都没有,VS编译的时候本来就不会通过,这是在面编译器开发工程师:)
我的理解:
s=s+1 是+号运算符,会把s转换成int 再计算,然后将int 赋回short报错。
而s+=1;是单目的运算符,在+=的操作中,自动会进行强制类型转换。
也就是说是在赋值时报错。而不是运算时出错。
如果说现在还处在用记事本写代码的时代,可能是有意义的。
但是对于现在的程序开发,本人认为没有意义。
现在知识越来越多了,想找个为难别人的问题越来越容易了,唉~~~
在VB中如果要求严格检查:Option Strict On
那么不同类型之间必须显示转换。
如果关闭Option Strict ,这两个整数转换完全可通过。
难道C# 不同于 VB 2005?
如果第1个编译出错,说明本身就是个overflow错误运算,只是C#在运行之前不提示这种错误,而vb会提示这种错误。
MSDN:
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
short z = x + y; // Error: no conversion from int to short
若要解决此问题,请使用强制转换:
short z = ( short )(x + y); // OK: explicit conversion
但是,在目标变量具有相同或更大的存储大小时,使用下列语句是可能的:
这个学生 面试通过了没。如果没有。那是因为没报上你大师的大名。嘿嘿。