c语言的位制转换


c语言基础类型包含有char,int, float, double等,显而易见,不同类型的变量所占的内存空间不同,然而当我们对这些不同数据类型进行 位制转换,那么会发生什么呢?

为了更好的理解在位置转换,我们首先看一个例子

#include <stdio.h>

int main(int argc, char* argv[])
{
    int i = 5.01;
    float f = 5;

    printf("%f\n", 5);
    printf("%lf\n", 5.01);
    printf("%f\n", f);
    
    printf("%d\n", 5.01);
    printf("%f\n", i);
    return 0;
}

C语言常量的存储类型

Q:如何获取c语言中常量的类型(在内存中的存储形式)
或者c语言中的常量都是什么数据类型呢?

c语言常量内存分析

看下面的例子

 printf("%f\n", 5);       //常量5是什么类型呢?在内存中占用了几个字节呢?
 printf("%f\n", 5.01);    //常量5.01是什么类型呢?在内存中占用了几个字节呢?

常量5是什么类型呢?在内存中占用了几个字节呢?
常量5.01是什么类型呢?在内存中占用了几个字节呢?

c语言中的常量类型可以通过sizeof来获取
注意:sizeof函数返回值类型为long int

sizeof函数的使用

// sizeof函数的使用
int a = 5;
printf("%ld\n", sizeof(int));    // sizeof入口参数可以是类型名
printf("%ld\n", sizeof(a));      // sizeof入口参数可以是变量名
printf("%ld\n", sizeof(5));      // sizeof入口参数可以是常量

C语言中格式控制符的作用

Q: c语言中的格式控制符的本质分析

格式控制符主要用于printf语句和文件的操作

注意:

  1. c语言中int和float类型均为4个字节,而double类型为8个字节
  2. 在printf语句中,float会自动转换成double,也就是, %f会从内存中读取八个字节的内容

c语言中的每个格式控制符均与特定的数据类型相对应,而这一切的本质均要从内存的角度去分析
%d => int 对应从内存中读取四个字节的数据
%f => double (float自动转换为double类型) 对应从内存中读取八个字节的数据
%…

实例分析

实例1如下:
printf("%f\n", 5);

分析如下:
参数5为int型,因此在内存中只占用四个字节,
然而%f使得printf语句从内存中读取八个字节的数据。
显然,内存访问越界,会有不可预料的情况发生

实例2如下:
printf("%ld\n", sizeof(5.01));

分析如下:
参数5.01为double型,因此在内存中占用八个字节,
然而%d使得printf语句从内存中仅仅读取四个字节的数据。
显然,内存访问不正确,同样会有不可预料的情况发生

C语言中的强制类型转换

Q1:具体分析 “int i = 5.01;”

将double型常量赋值给int型变量过程中会发生类型的强制转换
数据类型在强制转换过程中会发生什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值