鱼C论坛

 找回密码
 立即注册
查看: 2013|回复: 9

[已解决]大佬求助ya

[复制链接]
发表于 2023-4-10 19:08:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof a);
        return 0;
}
这个输出值是1。


#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof -2);
        return 0;
}
但是这个输出值是4。这是为什么呢?(这个是我在试验数据类型如果跟所输入的数字不匹配时会发生什么的时候发现的)求大佬解答,万分感谢。
最佳答案
2023-4-10 19:32:12
本帖最后由 isdkz 于 2023-4-10 20:18 编辑

你好,

关于你提到的这两个程序的输出结果,我来为你解释一下原因。

在第一个程序中:
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof a);
        return 0;
}

输出值是1,这是因为你在这里使用了sizeof操作符来获取变量a的大小,而a是一个有符号的字符类型(signed char),在大多数系统中,它占用1个字节。

在第二个程序中:
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof -2);
        return 0;
}

输出值是4,这是因为你在这里使用了sizeof操作符来获取-2这个整数字面量的大小,而没有指定特定的类型。在这种情况下,编译器会将-2视为int类型,通常情况下,一个int类型的变量在大多数系统中占用4个字节。

所以,第一个程序输出1,是因为sizeof操作符获取的是signed char类型变量a的大小;而第二个程序输出4,是因为sizeof操作符获取的是int类型字面量-2的大小。

希望这可以帮助你理解这两个程序的输出结果。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-10 19:26:54 | 显示全部楼层
在第一个程序中,sizeof a 表示 a 变量所占的字节数,由于 a 是一个有符号字符类型,因此其大小为 1 字节。

而在第二个程序中,sizeof -2 表示 -2 这个整数常量所占的字节数。在这里,-2 被视为一个整数常量,其类型为 int,因此 sizeof -2 的结果为 4 字节,即 int 类型的大小。

需要注意的是,虽然在第二个程序中 -2 被视为 int 类型,但是赋值给 signed char 类型的变量时,会发生隐式类型转换,即将 int 类型的 -2 转换为 signed char 类型的 -2,因此 a 的值为 -2。

来自ChatGPT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 19:32:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-4-10 20:18 编辑

你好,

关于你提到的这两个程序的输出结果,我来为你解释一下原因。

在第一个程序中:
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof a);
        return 0;
}

输出值是1,这是因为你在这里使用了sizeof操作符来获取变量a的大小,而a是一个有符号的字符类型(signed char),在大多数系统中,它占用1个字节。

在第二个程序中:
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",sizeof -2);
        return 0;
}

输出值是4,这是因为你在这里使用了sizeof操作符来获取-2这个整数字面量的大小,而没有指定特定的类型。在这种情况下,编译器会将-2视为int类型,通常情况下,一个int类型的变量在大多数系统中占用4个字节。

所以,第一个程序输出1,是因为sizeof操作符获取的是signed char类型变量a的大小;而第二个程序输出4,是因为sizeof操作符获取的是int类型字面量-2的大小。

希望这可以帮助你理解这两个程序的输出结果。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 19:32:52 | 显示全部楼层
isdkz 发表于 2023-4-10 19:32
你好,

关于你提到的这两个程序的输出结果,我来为你解释一下原因。

哦?同行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 19:45:15 | 显示全部楼层

现在我、sfqxx、liu、isdkz都在用chatgpt回答问题,那叫一个爽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-10 20:03:36 | 显示全部楼层
isdkz 发表于 2023-4-10 19:32
你好,

关于你提到的这两个程序的输出结果,我来为你解释一下原因。

感谢大佬,还有一个问题哈就是
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",a);
        return 0;
}
这样写出来之后结果是4294967294(2^32-2),但是如果换成这样:
#include <stdio.h>

int main()
{
       unsigned char a=-2;
       printf("%u",a);
        return 0;
}
结果是254。请问这是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-10 20:04:07 | 显示全部楼层
wuliangtdi 发表于 2023-4-10 19:26
在第一个程序中,sizeof a 表示 a 变量所占的字节数,由于 a 是一个有符号字符类型,因此其大小为 1 字节。 ...

感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 20:18:33 | 显示全部楼层
歌者文明清理员 发表于 2023-4-10 19:45
现在我、sfqxx、liu、isdkz都在用chatgpt回答问题,那叫一个爽

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 20:21:18 | 显示全部楼层
onlyyyr 发表于 2023-4-10 20:03
感谢大佬,还有一个问题哈就是
#include

在第一个程序中:
#include <stdio.h>

int main()
{
       signed char a=-2;
       printf("%u",a);
        return 0;
}

这个程序的输出值是4294967294,这是因为'a'是一个有符号字符类型(signed char),其值为-2。

当你使用%u格式说明符来打印'a'时,你告诉编译器将其视为无符号整数。

在这种情况下,-2作为有符号整数会被解释为无符号整数。由于int类型通常是32位的,所以-2被解释为2^32 - 2,即4294967294。

在第二个程序中:
#include <stdio.h>

int main()
{
       unsigned char a=-2;
       printf("%u",a);
        return 0;
}

这个程序的输出值是254,这是因为'a'被声明为无符号字符类型(unsigned char),其值为-2。

由于'a'已经是无符号类型,当你将-2赋值给它时,-2会被转换为一个无符号数。

这种情况下,-2相当于2^8 - 2,即256 - 2,等于254。因此,当你使用%u格式说明符来打印'a'时,它将正确地显示为254。

总之,第一个程序输出4294967294,是因为有符号整数-2在打印时被视为无符号整数;

而第二个程序输出254,是因为无符号字符类型变量'a'被赋值为-2时,-2被转换为无符号数值254。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-11 12:31:01 | 显示全部楼层
isdkz 发表于 2023-4-10 20:21
在第一个程序中:

好的好的,感谢大佬。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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