几条关于printf语句的疑惑

thisforyou 2010-08-15 11:49:27
printf("%#o\n", n >> 3 * abs(i));


printf("%0*d\n", 5 - abs(i), n / (int)pow(10, abs(i)));


i为整型变量,n为整型常量;


能详细解释下吗,书上没有,网上也没找到,拜托了
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovestefanie 2010-08-16
  • 打赏
  • 举报
回复
第二个貌似是第一个参数为位数,第二位整数,位数不够补0
thisforyou 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whwu2010 的回复:]
printf("%#o\n", n >> 3 * abs(i));中,o:无符号8进制整数,#表示在数值前增加分别在数值前增加'0',abs为绝对值,>>表示二进制右移;i如果为1,n为10则n(00001010)向右移三位为00000001,输出时前面补0为:01

printf("%0*d\n", 5 - abs(i), n / (int)pow(10, abs(i)));中,0:表示整数……
[/Quote]
谢谢,我明白了
lovestefanie 2010-08-16
  • 打赏
  • 举报
回复
错了。。。第一个是8进制补齐
第二个不懂
大昊 2010-08-16
  • 打赏
  • 举报
回复
printf("%#o\n", n >> 3 * abs(i));中,o:无符号8进制整数,#表示在数值前增加分别在数值前增加'0',abs为绝对值,>>表示二进制右移;i如果为1,n为10则n(00001010)向右移三位为00000001,输出时前面补0为:01

printf("%0*d\n", 5 - abs(i), n / (int)pow(10, abs(i)));中,0:表示整数不够宽度用0补齐,d:整数,*:表示第一个参数为输出的宽度,pow为10的abs(i)次方,i如果为1,n为10则宽度为4,值为10/10为1,用0补齐为:00001
thisforyou 2010-08-16
  • 打赏
  • 举报
回复
能不能说的详细点啊,我不太懂
lovestefanie 2010-08-15
  • 打赏
  • 举报
回复
将n的二进制右移3*abs(i)位,n为正补0,为负补1
abs(i)求绝对值
pow(a,b)求a的b次幂

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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