none
很基础,但估计错的也很多,我就不会,望高手细细解释!!谢谢!! RRS feed

  • 问题

  • 1、a^=b^(b^=a^b)是什么意思?
    它可以交换两个数值!!
    2、以下哪个类是int的基类?(    )
    A.Int32              B.Object          C.ValueType            D.Int16
    选什么呢,重点是为什么呢!!



    这两个题希望细细的说明白,答案不是主要的!谢谢各位!!
    2009年6月13日 12:48

答案

  • 你好!
         我详细解释一下:
    1,这行代码的功能是交换a,b的值,他基于这样一个原理:a^a^b的结果是b,三个数做异或,有两个相等,结果等于另外一个数这个可以通过异或的法则得到
         我详细的来解释这个问题,a^=b^(b^=a^b),相当于a=a^b^(b=b^a^b),先计算等号右边的表达式,从左到右计算,先是a^b,然后计算括号里的(b=b^a^b),这里b的值就等于a了(根据我开始提到的原理),整个括号里的值等于a,然后计算a^b^a(因为括号里的计算结果是a),这时计算的结果是b,然后在把这个b赋给等号左面的a,这时a的值就是b了
         实际上不使用第三个变量,交换两个变量的值还有很多方法,我写了三个,你可以作为参考:
    1.
    a = b + (b = a) * 0;

    2.
    a = a + b;
    b = a - b;
    a = a - b;

    3.
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;


    2,答案是ValueType,所有的值类型都继承于ValueType,而ValueType继承于Object
         int实际上就是C#里提供的关键字,表示的是Int32类型!
    周雪峰
    • 已标记为答案 痴迷.Net 2009年6月13日 23:03
    2009年6月13日 14:00
    版主

全部回复

  • 没人回答我就顶!!
    2009年6月13日 13:34
  • 你好!
         我详细解释一下:
    1,这行代码的功能是交换a,b的值,他基于这样一个原理:a^a^b的结果是b,三个数做异或,有两个相等,结果等于另外一个数这个可以通过异或的法则得到
         我详细的来解释这个问题,a^=b^(b^=a^b),相当于a=a^b^(b=b^a^b),先计算等号右边的表达式,从左到右计算,先是a^b,然后计算括号里的(b=b^a^b),这里b的值就等于a了(根据我开始提到的原理),整个括号里的值等于a,然后计算a^b^a(因为括号里的计算结果是a),这时计算的结果是b,然后在把这个b赋给等号左面的a,这时a的值就是b了
         实际上不使用第三个变量,交换两个变量的值还有很多方法,我写了三个,你可以作为参考:
    1.
    a = b + (b = a) * 0;

    2.
    a = a + b;
    b = a - b;
    a = a - b;

    3.
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;


    2,答案是ValueType,所有的值类型都继承于ValueType,而ValueType继承于Object
         int实际上就是C#里提供的关键字,表示的是Int32类型!
    周雪峰
    • 已标记为答案 痴迷.Net 2009年6月13日 23:03
    2009年6月13日 14:00
    版主
  • 第一次了解到不使用第三个变量交换两个数的方法……又长知识了……

    ~~~~~ 如果我的回复对您有所帮助,请您点击一下此回复右上角的“投票认定帖子内容有帮助” ~~~~~
    ~~~~~ 向着三颗奖牌出发!^______^ ~~~~~
    2009年6月13日 16:17
  • 雪峰同志全部答对了,恭喜恭喜!
    邹俊才
    2009年6月13日 17:26
    版主
  • 幸亏我请教大家了一下,要不我又差点被他们给忽悠了 非常感谢!!
    2009年6月13日 23:03
  • 多谢大家支持啊!
    过去面试的时候常常考类似的问题,现在应该不考这些了,现在一般是直接上机实现功能了!
    周雪峰
    2009年6月14日 5:37
    版主