练习7:更多变量和一些算术(笨办法学C

在C语言中,char类型参与乘法运算时会被提升为int类型,确保运算的精度。这种隐式类型转换可能导致数据溢出问题,程序员需要注意计算结果的范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int main(int argc, char *argv[])
{
    int bugs = 100;
    double bug_rate = 1.2;
    printf("You have %d bugs at the imaginary rate of %f.\n",
            bugs, bug_rate);
    long universe_of_defects = 1L * 1024L * 1024L * 1024L;
    printf("The entire universe has %ld bugs.\n",
            universe_of_defects);
    double expected_bugs = bugs * bug_rate;
    printf("You are expected to have %f bugs.\n",
            expected_bugs);
    double part_of_universe = expected_bugs / universe_of_defects;
    printf("That is only a %e portion of the universe.\n",
            part_of_universe);
    // this makes no sense, just a demo of something weird
    char nul_byte = '\0';
    int care_percentage = bugs * nul_byte;
    printf("Which means you should care %d%%.\n",
            care_percentage);
    return 0;
}`在这里插入代码片`
long universe_of_defects = 1L * 1024L * 1024L * 1024L;    
printf("The entire universe has %ld bugs.\n",
        universe_of_defects);
  • 1L 是什么数字?为什么用%ld打印?

在这段代码中,1L表示长整型常量1。后缀L表示该常量是一个长整型。
使用%ld来打印long类型的值是因为universe_of_defects变量被声明为long类型,而%ld是用于格式化长整型值的格式指示符。
在printf函数中,%ld用于告诉printf要打印一个long类型的变量。universe_of_defects是一个long类型的变量,所以使用%ld来打印它的值是正确的。
通过这样的格式指示符,printf函数将会将universe_of_defects的值以十进制形式打印出来,并插入到格式化字符串中的对应位置。

  • 如何使它崩溃
    像之前一样,向printf传入错误的参数来使它崩溃。对比%c,看看当你使用%s来打印nul_byte变量时会发生什么。做完这些之后,在Valgrind下运行它看看关于你的这次尝试会输出什么。

都不报错。

%d时候是0
Which means you should care 0%.
%c时候是空字符
Which means you should care %.
%s时候是null
Which means you should care (null)%.

  • unsigned long 最大得数字

unsigned long的最大值取决于编译器和系统架构的位数。在大多数情况下,unsigned long在32位系统上的范围是从0到4294967295(232-1),而在64位系统上的范围是从0到18446744073709551615(264-1)。
您可以使用ULONG_MAX常量来获取特定系统上unsigned long的最大值。ULONG_MAX是在<limits.h>头文件中定义的常量,表示unsigned long类型的最大值。
以下是一个示例代码,演示如何打印出unsigned long的最大值:
c
Copy code
#include <stdio.h>
#include <limits.h>
int main() {
unsigned long max_value = ULONG_MAX;
printf(“The maximum value of unsigned long: %lu\n”, max_value);
return 0;
}
编译并运行上述代码,它将输出您系统上unsigned long类型的最大值。

  • User 在c语言中为什么char可以和int相乘

在C语言中,char类型可以与int相乘是因为在表达式中,char类型会被隐式地提升为int类型,然后执行乘法运算。
C语言中的整数提升规则指定,当较小的整数类型参与二元运算时,会自动将其提升为较大的整数类型。这是为了确保表达式的操作数类型匹配,并避免潜在的精度丢失或数据截断。
对于char类型,默认情况下,它被视为有符号整数类型,其取值范围为-128到127(对于8位有符号char)。当char类型参与乘法运算时,它会被隐式地提升为int类型,这是一种更大的整数类型,其取值范围通常为-2147483648到2147483647(对于32位平台)。
因此,当执行char和int的乘法运算时,char类型会被自动提升为int类型,然后进行乘法操作。这样可以确保操作数的类型匹配,并且乘法结果的类型也是int。
需要注意的是,乘法运算可能导致溢出,因此在执行乘法操作时应谨慎处理结果的范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44781508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值