各位朋友你们好!
我是个新手,C语言上有个新问题想请教一下,谢谢了!问题如下:
设a=1,b=2,c=3,d=4,则表达式: a<b?a: c<d?a: d的结果为( )。
我想知道这题的解析过程??谢谢大家帮忙!
[此贴子已经被忆楠于2004-10-01 22:41:05编辑过]
各位朋友你们好!
我是个新手,C语言上有个新问题想请教一下,谢谢了!问题如下:
设a=1,b=2,c=3,d=4,则表达式: a<b?a: c<d?a: d的结果为( )。
我想知道这题的解析过程??谢谢大家帮忙!
[此贴子已经被忆楠于2004-10-01 22:41:05编辑过]
还有我又遇到一题不会的想请指教如下:
下列程序执行后的输出结果是( )
main ( )
﹛ char x=0xFFFF; printf("% \n",x--) ; ﹜
答案有:A。-32767 B。FFFF C。-1 D。-32768
不过我想要解析过程谢谢各位高手朋友!!
对了,请大家不要误会啊1我不是说你们讲的不详细,
只是我个人的问题,请各位高手帮帮忙啊!谢谢了!
再问一句,怎样才能学好 c 语言啊?有没有迷经啊,请指教指教!
惭愧啊,最近实在太忙了,回答的问题都是敷衍了事,真是对不起大家!在此向大家道歉~~你没理解是我没讲清楚~此乃寡人之过也~
好,现在我们来解决第一个问题:
设a=1,b=2,c=3,d=4,则表达式: a<b?a: c<d?a: d的结果为
解析: a=1,b=2,c=3,d=4 这是程序一开始就赋的初值 因为<的优先级别要比?:的优先级要高,所以程序先运算a<b 和 c<d,所以
a<b?a:c<d?a:d 就变为: 1?a:1?a:d
继续。因为?: 与 ?:是同一优先级,根据运算时从左到右的原则,表达式继续变为: (1?a:1)?a:d => a?a:d => a
所以表达式子最终的结果就是 a,也就是1啦
第二个问题:
你的题目少打一个d吧?我想应该是 printf("%d\n",x--); 才有答案符合
0xffff是个十六进制的数据,转换成无符号的整形变量(%ud)就是65535 转换成有符号的整形变量(%d)就是-1
原因:因为有符号整形变量的范围是:-32768~+32767 如果超过了范围将会从另一头溢出,也就是从另一头开始。比如:32767+1 你也许会认为答案是32768,但是实际上因为32768超过了变量的最大值,他将会从最小值溢出,所以你将会得到的答案是-32768
同理,0xffff转成 %ud 的值为65535,肯定超过了 %d 的范围,所以他将会溢出,然后从-32768开始算起。所以结果为-1。
你听明白了吗?我想也许我讲得还不够很详细,如果还不明白,继续问,我会一一解答。
附:学C没捷径,指针最关键。
谢谢这位c高手帮我这样一一的详解真是麻烦了。
第一道题我看懂了非常感谢!!
不好意思,第二道却实是少了一个d ,但还是看不懂。
(1)在这个问题上 0xFFFF是怎样转成65535的?为什么是65535而不是0~65535之间的数?
(2)然后有符号整型变量好像是-32767~+32767 (我从书上看的,不过好像我这书真是垃圾,许多解析都是错的)。
关于溢出的问题我看懂了。
(3) 但( 0xffff转成 %ud 的值为65535,肯定超过了 %d 的范围,所以他将会溢出,然后从-32768开始算起。所以结果为-1)?无符号整型的变量是从0~65535的啊 ,为什么从-32768开始算呢?是怎样算到-1的呢?
望指点,谢谢!
哦~~数据在硬盘上的最终存储形态是0101010101010111之类的,这个叫做二进制度。但是二进制实在是太麻烦了,于是我们就用十进制、十六进制等等来表示这些数。
[1] x0ffff就正是一个十六进制数,但为什么0XFFFF转成无符号整形就变成65535了呢?这个我自己是明白的,但是表达能力有限,说不出~~
当然,你也可以自己编写个程序 main() { int a; scanf("%d",&a); /*输入一个十进制数值*/ printf("<10> %d\n",a); /*转换成一个有符号十进制数值*/ printf("<Unsign10> %ud\n",a); /*转换成一个有符号十进制数值*/ printf("<16> 0x%x\n",a); /*转换成一个十六进制数值*/ getch(); }
[2] 有符号的整形变量的范围是-32768~+32767 你的书上是错误的!
[3] 哦,我说得不够清楚。这题的转换我为了让你看清楚,是这样转的:
十六进制 =》 无符号十进制 =》 有符号十进制 0xffff => 65535 => -1
65535已经超过了有符号的上限+32767,所以要发生溢出
[此贴子已经被作者于2004-08-08 10:13:00编辑过]
谢谢这位c 高手替我逐一解析,只是我能力不够。
顺便问一下,学c语言初中文化可以吗?是不是很难?
还有学c语言有没有什么好的学习方法?可不可以给我讲讲!谢谢!
还有学c语言作用是什么?是编软件还是。。。?
你可以讲讲你学c语言的目的是什么吗?
可以,只要你能接受函数这个概念,我想过2级应该没什么问题,但绝对得不到优秀! 而且你要是遇到了一些很专业的问题,比如矩阵之类的就要避开了.
什么叫好的学习方法,适合自己的才叫好的! 我的方法很简单,把数据看成长短不一的积木,然后用工具把他们按我的意愿搭起来.这样就是个程序了. 很抽象是不是?
学C语言的作用是什么? 反问一句,学数学的作用是什么? 我学C语言是听说C语言就像 九阳神功 那样,学会后以后学什么武功都快. 这好象有点夸张呵呵,目前我学C语言是为了上大学就不用学了,空出来的时间去找女孩子.......
不好意思这位c高手,你上次给我的那个程序(第7楼)有个地方好你有点问题,
就是:printf("<16> 0x%x\n",a); /*转换成一个十六进制数值*/
就是加下划线的地方是不是应该改成 %0x\n",a
对不对啊?