分页: 1 / 1

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

发表于 : 2014-12-06 20:33
drongh
谢谢各位前面的答复。
通过递归,十进制转二进制问题。

代码: 全选

#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')

谢谢。

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

发表于 : 2014-12-06 22:50
rosynirvana
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'

所以等价的

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

发表于 : 2014-12-07 0:08
astolia
就是一个耍小聪明的作法,利用了ascii编码的顺序特性和字符字面量视为char的特性。可读性不好,不提倡。

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

发表于 : 2014-12-07 10:45
drongh
谢谢。懂了。

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

发表于 : 2014-12-07 11:47
rosynirvana
C里面字符字面值是int

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

发表于 : 2014-12-08 9:32
eexpress
这是很正常的写法。只是有可能危险。
'0'只是表示查表的起始量。汇编中经常会这样使用。