数值溢出 & 输入输出函数 & 运算符 & 条件、循环语句

数值溢出 & 输入输出函数 & 运算符 & 条件、循环语句文章目录数值溢出 & 输入输出函数 & 运算符 & 条件、循环语句1. 数值溢出1.1 无符号数1.2 有符号数1.3 小结2. 不常用关键字(了解)==3. 输入输出函数==3.1 输出函数3.2 输入函数3.2.1 scanf 函数3.2.2 getchar 函数4. 运算符==4.1...
摘要由CSDN通过智能技术生成

数值溢出 & 输入输出函数 & 运算符 & 条件、循环语句

1. 数值溢出

  • 如果 int 类型变量,已经取最大值(2147483647),再给这个变量 +1。就发了溢出。

    • 上溢出:最大值+1
    • 下溢出:最小值-1

在这里插入图片描述

1.1 无符号数

  • 取值范围 0 ~ 232-1
  • 最大值 + 1 ——> 0
  • 0 -1 ——> 最大值。
// 上溢出
int main(void)
{
   
	unsigned int a = UINT_MAX;	// 取出无符号最大值

	printf("最大值+1 = %d\n", a + 1);  // 0
	printf("最大值+2 = %d\n", a + 2);	// 1

	return 0;
}
// 下溢出

在这里插入图片描述

1.2 有符号数

  • 上溢出

    • 最大值+1,上溢出 == 最小值。
    int main(void)
    {
         
    	int a = INT_MAX;	// 取出无符号最小值
    
    	printf("最大值+1 = %d, 最小值 = %d\n", a+1, INT_MIN);
    
    	return 0;
    }
    

在这里插入图片描述

  • 下溢出

    • 最小值-1,下溢出 == 最大值。

在这里插入图片描述

1.3 小结

  • 大部分编译器,对于数值溢出,采用上述处理方式。但,个别编译器有可能不能。
  • 受数值溢出影响,进行数据存储时,要选择恰当的数据类型。389482390483209 — int

2. 不常用关键字(了解)

  • extern:
    • 表示声明。声明没有内存空。不能提升为定义。
  • const:
    • 限制一个变量为只读。—— 常量。
  • Volatile:
    • 防止编译优化。
  • register:
    • 定义一个寄存器变量。 没有内存地址。

3. 输入输出函数

3.1 输出函数

  • printf();

    • %d、%c、%x、%u、%s …
  • putchar() 函数:

    • 输出一个字符到屏幕。
    • ‘abcZ’ 是错误的定义,既不是 char 也不是字符串。
    putchar(97);	// 97 == 'a'
    
    putchar('\n');	// 输出换行符。
    
    putchar('b'); 
    
    putchar('\n');	// 使用评率较高。 printf("\n");
    
    putchar('abcZ'); //‘abcZ’是错误的定义,既不是 char 也不是字符串。
    

3.2 输入函数

3.2.1 scanf 函数

使用

  • 安装指定个格式匹配符,获取指定类型数据。

  • 获取整数

    •   int a;	// 可以定义a变量(有内存空间),也可以声明(自动提升成定义,有内存空间)
        scanf("%d", &a);	// &: 取变量a的地址 ——> 拿到a的内存空间。
      
    • 示例:

    •   // scanf 输入
        int main(void)
        {
             
        	//int a = 10;
        	int a;   // 在scanf执行时,会提示为定义。
        
        	int ret = scanf("%d", &a); //scanf可以从键盘获取用户输入,用户根据 %d 输入整数。
        
        	printf("获取的a为:%d\n", a);
        
        	return EXIT_SUCCESS;
        }
      
    • 一次性获取多个整数

    • 常见的错误书写方法

      int a, b, c;	// 一次性创建多个 int 类型变量。
      
      // scanf 可以从键盘获取用户输入, 用户根据 多个%d 输入整数。
      int ret = scanf("%d%d%d", &a, &b, &c);  
      
      // 上述写法编译器无法识别,输入的 123 应该怎样分配给 3 个 %d
      
    • 正确的书写方式: (推荐)

      int main(void)
      {
             
      	int a, b, c;	// 一次性创建多个 int 类型变量。
      
      	// scanf 可以从键盘获取用户输入, 用户根据 多个%d 输入整数。
      	int ret = scanf("%d %d %d", &a, &b, &c);  
      
      	printf("获取的a为:%d\n", a);
      	printf("获取的b为:%d\n", b);
      	printf("获取的c为:%d\n", c);
      
      	return EXIT_SUCCESS;
      }
      
  • 获取字符

    // scanf 输入,获取字符。
    int main(void)
    {
         
    	char ch1, ch2, ch3;  // 一定性创建多个 char 变量
    
    	printf("请输入3个字符,用空格隔分:");
    
    	scanf("%c %c %c", &ch1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值