鱼C论坛

 找回密码
 立即注册
查看: 3369|回复: 7

[已解决]%11u 和unsigned,求助

[复制链接]
发表于 2018-7-22 13:35:08 | 显示全部楼层 |阅读模式
15鱼币
#include <stdio.h>
#include <math.h>

int main()
{
        unsigned long long sum = 0;
        unsigned long long temp;
        unsigned long long weight;
        int i;

        for (i=0; i < 64; i++)
        {
                temp = pow(2, i);
                sum = sum + temp;
        }

        weight = sum / 25000;

        printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
        printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);

        return 0;
}

为什么一定要用unsigned不能去掉?%11u是什么?不能用%d取代吗
最佳答案
2018-7-22 13:35:09
本帖最后由 关键是感觉 于 2018-7-22 17:40 编辑

为什么一定要用unsigned不能去掉?
你肯定可以去掉(代码是你在写,只要语法没错误,随便你怎样都行),但是表示范围少了,比如超市找零,你见过收银员倒给你拿钱的?
简单说,超市收银是在做商品单价累计的工作,是在做加法。所以用无符号数表示比较好一点。
只是咱们根据需要定义合适的数据类型,比较好。
%11u是什么?不能用%d取代吗
这个你也可以使用%d,只是答案错误而已。
首先printf是一个函数,printf(字符串,参数....);
参数怎样解析?程序去猜?当然不是,由前面的字符串对应的 格式字符串 解析。你不给对应的 格式字符串 那么答案有时候错误也是应该的。(注意我说的是有时候哦)
printf("%d\n",-1);
printf("%u\n",-1);
比如这两句,第一个printf告诉他-1给我按照 整数有符号解析 第二个printf告诉他-1给我按照 整数无符号解析,就是这样简单的道理。
数据都是二进制,怎样去理解,由你去说明
 #include <stdio.h>

int main(void){
        //sizoef(f)占用8字节:00 00 00 00 00 00 f0 3f
        double f=1.0;
        int a,b;
        a=0x0;
        b=0x3ff00000;
        printf("%f\n",f);
        printf("%f\n",a,b);
        

    return 0;
}
/*
输出结果:1.0 1.0
vs2010测试
*/
/*这个我就非要把 a 和 b 的值 看成一个浮点数去解析*/
/*
栈建议说明
00
00
00
00
00
00
f0
3f
*/

最佳答案

查看完整内容

为什么一定要用unsigned不能去掉? 你肯定可以去掉(代码是你在写,只要语法没错误,随便你怎样都行),但是表示范围少了,比如超市找零,你见过收银员倒给你拿钱的? 简单说,超市收银是在做商品单价累计的工作,是在做加法。所以用无符号数表示比较好一点。 只是咱们根据需要定义合适的数据类型,比较好。 %11u是什么?不能用%d取代吗 这个你也可以使用%d,只是答案错误而已。 首先printf是一个函数,printf(字符串,参数.. ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-22 13:35:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 关键是感觉 于 2018-7-22 17:40 编辑

为什么一定要用unsigned不能去掉?
你肯定可以去掉(代码是你在写,只要语法没错误,随便你怎样都行),但是表示范围少了,比如超市找零,你见过收银员倒给你拿钱的?
简单说,超市收银是在做商品单价累计的工作,是在做加法。所以用无符号数表示比较好一点。
只是咱们根据需要定义合适的数据类型,比较好。
%11u是什么?不能用%d取代吗
这个你也可以使用%d,只是答案错误而已。
首先printf是一个函数,printf(字符串,参数....);
参数怎样解析?程序去猜?当然不是,由前面的字符串对应的 格式字符串 解析。你不给对应的 格式字符串 那么答案有时候错误也是应该的。(注意我说的是有时候哦)
printf("%d\n",-1);
printf("%u\n",-1);
比如这两句,第一个printf告诉他-1给我按照 整数有符号解析 第二个printf告诉他-1给我按照 整数无符号解析,就是这样简单的道理。
数据都是二进制,怎样去理解,由你去说明
 #include <stdio.h>

int main(void){
        //sizoef(f)占用8字节:00 00 00 00 00 00 f0 3f
        double f=1.0;
        int a,b;
        a=0x0;
        b=0x3ff00000;
        printf("%f\n",f);
        printf("%f\n",a,b);
        

    return 0;
}
/*
输出结果:1.0 1.0
vs2010测试
*/
/*这个我就非要把 a 和 b 的值 看成一个浮点数去解析*/
/*
栈建议说明
00
00
00
00
00
00
f0
3f
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-22 13:36:14 | 显示全部楼层
求助。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-22 13:37:11 | 显示全部楼层
这s1e6那一课的作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-22 13:50:53 | 显示全部楼层
本帖最后由 ba21 于 2018-7-22 14:29 编辑

因为取值范围不一样。
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615

你这应该不是数字11 而是字母ll
%llu    llu表示unsigned long long

假设是数字 %11u
那么 11表示占位。u表示无符号型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-22 15:04:42 | 显示全部楼层
ba21 发表于 2018-7-22 13:50
因为取值范围不一样。
long long的最大值:9223372036854775807
long long的最小值:-922337203685477580 ...

明明是long long更大。为何他不行?
%d为何不能取代无符合型?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-22 15:12:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-22 16:39:12 | 显示全部楼层
皇天在上 发表于 2018-7-22 15:04
明明是long long更大。为何他不行?
%d为何不能取代无符合型?

你从哪里看出来 9223372036854775807 要比 18446744073709551615大了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表