一道面试题,有兴趣来看看呀

Developerljm 2002-12-23 09:58:04
如果c是char变量,且表达式(c<<3==c>>3)&&c>0
的值为真(即非零),则如下语句

printf("%d\n",c);

输出是__________.

各位大虾为什么,给个答案,一定给分呀):
...全文
18 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yatuor 2002-12-23
  • 打赏
  • 举报
回复
char ch=8;退格符
roland_c 2002-12-23
  • 打赏
  • 举报
回复
看样子好象我说得太快了,11000011是不是也是一个结果呀,不过以十进制数输出大概不是183
roland_c 2002-12-23
  • 打赏
  • 举报
回复
高四位与低四位应该呈对称形式,这样不论左移以后和右移以后的才有可能达到一样的结果.
J2eeLearner 2002-12-23
  • 打赏
  • 举报
回复
01000001 ===>65
J2eeLearner 2002-12-23
  • 打赏
  • 举报
回复
01000001
roland_c 2002-12-23
  • 打赏
  • 举报
回复
183
ninesong 2002-12-23
  • 打赏
  • 举报
回复

如果是字符那么应该一般是7位,最高为0XX XX XXX (同时通过>0也说明最高位是0)

7 6 5 4 3 2 1 0
0 A B C D E F G

c<<3==c>>3为真,
0000ABCD==CDEFG000

我们可以看出BCDEF都是0。

那么A和G肯定都是1这样就求出了这个变量。

01000001具体是整数几,大概是65吧。

不过我觉得也不是很肯定,特别是最高位上。这需要对计算机内部比较熟悉。
大家再讨论吧。
liujf 2002-12-23
  • 打赏
  • 举报
回复
上面几位高手现在写什么程序啊,拿多少钱??
liujf 2002-12-23
  • 打赏
  • 举报
回复
说句实话,我在工作中很少用的位操作。但我照样用C语言写出过大系统,
位操作在c里很重要吗?
aivin 2002-12-23
  • 打赏
  • 举报
回复
65没错的啦
chinajiji 2002-12-23
  • 打赏
  • 举报
回复
一个前提:sizeof (char) == 8 (一般机器都能满足这个条件)
当>>操作是按符号位扩展高位的话:
C只能等于65;
当>>操作是按0填充最高3位的话:
C可以等于65;也可以等于195:即:1100,0011;
另外roland_C(凤凰)的思想非常好,你能证明你的想法吗?
zpplayer 2002-12-23
  • 打赏
  • 举报
回复
对不起,看错了不会是1的,但除了0以外这个等式没有解吧,
c*8 == c/8;
c = ????
zpplayer 2002-12-23
  • 打赏
  • 举报
回复
1
dawn33 2002-12-23
  • 打赏
  • 举报
回复
65
maojincxj 2002-12-23
  • 打赏
  • 举报
回复
设c = a1 a2 a3 a4 a5 a6 a7 a8,
c >> 3 = 0 0 0 |a1 a2| a3 a4 a5, (1)
c << 3 = a4 a5 a6 |a7 a8| 0 0 0, (2)

由上二式得:
a1 a2 = a7 a8(01,10,11,不能为00,否则c = 0,不和题意)
a3 = a4 = a5 = a6 = 0;

另如果最高位为1,则>>时是移位1不是0,而<<总是移位0,
so,取a1 a2 = a7 a8 = 01,
so, c =01000001 = 65
Developerljm 2002-12-23
  • 打赏
  • 举报
回复
没有肯定答问答吗?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧