有助于理解数的二进制表示的两道笔试题

来源:互联网 发布:倾斜数据的金字塔模型 编辑:程序博客网 时间:2024/05/22 05:04

两道笔试题,大家帮忙看一下... http://topic.csdn.net/u/20081029/10/ee84a378-bdd0-41ec-a4af-916ba59baaba.html

1.已知x,不用+,-,*,/符号,计算出x+1的值;
2.检验一个整数是否为2的n次方数,要求用一行代码,而且不能使用循环语句。

如果对数值的二进制表示相当熟悉,而且聪明的话,应该不是问题。

 

第1题的解法:

  1. int add1(int x)
  2. {
  3.  int i = 1;
  4.  while(x&i)
  5.  {
  6.    x &=(~i);
  7.    i = i<<1;
  8.  }
  9.  x |= i;
  10.  return x;

如果x是正数,那么abs(~x)就可以了,对于负数abs(~x)是达不到目的的。利用了数是按补码形式表示的,负数的补码就是该数绝对值的二进制码各位取反然后加1得到的,我们就利用这个加1来符合题意。对于正数,abs(~x)确实就可以啦,但是如果x是负数呢?而前面那个函数add1是不分正负数都可以操作的,这也是因为数是补码表示的的缘故。

 

第2题 检验一个整数是否为2的n次方数,要求用一行代码,而且不能使用循环语句。解法:

x&(x-1) == 0 //该式如果成立,则x是2的某次方

如果x是2的某次方,那么这个数的二进制表示中只有一位是1,其他全是0,那样的话,x-1就是低位是1高位是0分成截然不同的两段的。

当然了,这个题用那种一个二进制位一个二进制位判断一下的办法也是可以实现的,一行的话,那就。。。

 

参考:

补码_百度百科 http://baike.baidu.com/view/377340.htm

补码 - 维基百科,自由的百科全书 http://zh.wikipedia.org/w/index.php?title=%E8%A1%A5%E7%A0%81&variant=zh-cn

有符号数处理 - 维基百科,自由的百科全书 http://zh.wikipedia.org/w/index.php?title=%E6%9C%89%E7%AC%A6%E8%99%9F%E6%95%B8%E8%99%95%E7%90%86&variant=zh-cn

 

abs函数是怎么实现的呢?有没有用加减乘除符号呢?

这个,abs是主要靠位操作巧妙实现的,不过还是用了个减操作,见 GCC的BUG研究(Rev.3) - 猛禽的编程艺术 - CSDNBlog http://blog.csdn.net/Raptor/archive/2007/11/19/1893079.aspx

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园老师讨厌一个孩子怎么办 幼儿园老师对孩子不好怎么办 高中分班讨厌班主任怎么办 把孩子老师惹了怎么办 高三班主任第一节课应该怎么办 高三孩子与班主任不和怎么办 孩子很害怕一件事怎么办 吼完孩子觉得很害怕怎么办 小朋友在幼儿园被欺负怎么办 老师总找孩子茬怎么办 小孩说幼儿园老师不喜欢她怎么办 小孩在学校老师不喜欢怎么办 好哭的孩子老师怎么办 小孩哭的犟住怎么办 2-3小孩脾气很犟怎么办 生了孩子没奶怎么办 二年级孩子写作业慢怎么办 六年级下册数学解决问题差的怎么办 孩子五年级了学习成绩不好怎么办 孩子做错事不承认怎么办 二年级小孩拼音差怎么办 小学三年级数学60多分怎么办 孩子三年级了数学不开窍怎么办 初二数学太差该怎么办 孩子语文阅读理解能力差怎么办 5年级数学不开窍怎么办 一年级孩子数学不开窍怎么办 三年级孩子数学成绩差怎么办 孩子三年级数学太差怎么办 三年级孩子数学理解能力差怎么办 教小孩做作业老是发火怎么办 孩子拿笔重写字太黑怎么办 教小孩写不到汉字怎么办 一年级孩子数学理解能力差怎么办 小孩一年级数学学不好怎么办 孩子一年级数学学不好怎么办 小学一年级数学学不好怎么办 孩子一年级数学成绩不好怎么办 成绩差的孩子该怎么办 面对成绩差的孩子该怎么办 六年级数学成绩差该怎么办