c语言疑问,关于putchar('0' + r)的写法。

软件和网站开发以及相关技术探讨
回复
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

c语言疑问,关于putchar('0' + r)的写法。

#1

帖子 drongh » 2014-12-06 20:33

谢谢各位前面的答复。
通过递归,十进制转二进制问题。

代码: 全选

#include "stdio.h"

void to_binary(unsigned long n);

int main(int argc, char const *argv[])
{
	unsigned long number;
	printf("Enter an integer (q to quit): \n");
	while (scanf("%lu", &number) == 1) {
		printf("Binary equivalent: ");
		to_binary(number);
		putchar('\n');
		printf("Enter an integer (q to quit): \n");
	}
	printf("Done.\n");
	return 0;
}

void to_binary(unsigned long n) {
	int r;
	r = n % 2;
	if (n >= 2) {
		to_binary(n / 2);
	}
	putchar('0' + r);
}
最后一句putchar('0' + r) 为什么可以这样写。标准写法是putchar(r ? '1' : '0')

谢谢。
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: c语言疑问,关于putchar('0' + r)的写法。

#2

帖子 rosynirvana » 2014-12-06 22:50

r是n % 2
所以r不是1就是0
如果r是1,那么putchar('0' + 1) 就是putchar('1'),r ? '1' : '0'也是'1'
如果r是0,那么putchar('0' + 0) 就是putchar('0'),r ? '1' : '0'也是'0'

所以等价的
头像
astolia
论坛版主
帖子: 6399
注册时间: 2008-09-18 13:11

Re: c语言疑问,关于putchar('0' + r)的写法。

#3

帖子 astolia » 2014-12-07 0:08

就是一个耍小聪明的作法,利用了ascii编码的顺序特性和字符字面量视为char的特性。可读性不好,不提倡。
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

Re: c语言疑问,关于putchar('0' + r)的写法。

#4

帖子 drongh » 2014-12-07 10:45

谢谢。懂了。
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: c语言疑问,关于putchar('0' + r)的写法。

#5

帖子 rosynirvana » 2014-12-07 11:47

C里面字符字面值是int
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: c语言疑问,关于putchar('0' + r)的写法。

#6

帖子 eexpress » 2014-12-08 9:32

这是很正常的写法。只是有可能危险。
'0'只是表示查表的起始量。汇编中经常会这样使用。
● 鸣学
回复