c语言中printf("%d尀n",(-9)%4);和printf("%d尀n",9%(-4));的结果为什么不同

2025-03-24 02:01:01
推荐回答(2个)
回答1:

(-9)%4=-1
9%(-4)=1
因为:
-9=(-2)*4+(-1)
9=(-2)*(-4)+1
最后部分的加数,就是余数。所以不同。

我们计算机bai自己运行这道题的时du候一个int型是4个字节,所以移动9位是36字节。本题的int应该zhi是两个字节,所以移动dao9位是18字节。十进制的18换算成16进制是0x12,加上194就是0x194+0x12=0x1a6。

\n是一个转义字符,意思是换行,如果你只输出\n的话会看到光标到了另一行printf("a\nb")则可以看到明显效果:a在上b在下。printf("%d",x)是以整数的形式输出一个数,后面必须加一个参数,表示被输出的数。

格式化输出的不同:printf("a=%d,b=%d",a,b)打印出来的是a="a的值",b="b的值",如果a和b的值分别为1、2,则打印到屏幕上的结果是a=1,b=2。printf("%d,%d\n",a,b)打印出来的只有a和b的值,如果a和b分别为1、2,则打印到屏幕上的结果是1,2。这种结果的区别是格式化输出的作用,在printf中双引号里面的内容按原样输出,而%后面带一个字符是引号后面参数的格式化,代表用什么样的格式输出后面的参数。

转义字符的有无:printf("%d,%d\n",a,b)里面有一个转义字符\n,这个转义字符的功能是换行,也就是说下一个输出会在下一行,而printf("a=%d,b=%d",a,b)没有这个转义字符,所以它不会换行,下一个输出直接接在上一个输出的后面。三、运算符的有无及作用:printf("a=%d,b=%d",a,b)里面的=不是赋值,而是直接输出一个=,printf("%d,%d\n",a,b)没有=,所以没有=的输出。

回答2:

(-9)%4=-1
9%(-4)=1
因为:
-9=(-2)*4+(-1)
9=(-2)*(-4)+1
最后部分的加数,就是余数。