C语言——数据类型,数据大小,有无符号位的区别

数据类型

分类:

在这里插入图片描述

基本类型:

在这里插入图片描述
C语言没有限制过 int 和 short int 多大,之规定了小于等于的关系,即short int 小于等于int

那么我们如何计算数据的大小呢?

C语言提供了一个运算符	sizeof

sizeof运算符用于活的数据类型或表达式的长度

sizeof 使用规则

  • sizeof(object); //sizeof(对象)
  • sizeof(type_name); //sizeof(类型)
  • sizeof object; //sizeof 对象

例1:

#include <stdio.h>

#define YEAR 2022
#define MONTH 1
#define DAY 2
#define WEATHER "晴天"

int main()
{
    int i;
    char j;
    float k;

    printf("size of int is %d\n",sizeof(int));
    printf("size of i is %d\n",sizeof(i));
    printf("size of char is %d\n",sizeof(char));
    printf("size of j is %d\n",sizeof j);
    printf("size of float is %d\n",sizeof(float));
    printf("size of YEAR is %d\n",sizeof YEAR);
    printf("size of WEATHER is %d\n",sizeof WEATHER);
   
    return 0;
}

运行结果:
在这里插入图片描述

例2:

#include <stdio.h>

int main()
{
    printf("size of int is %d\n",sizeof(int));
    printf("size of short int is %d\n",sizeof(short int));
    printf("size of long int is %d\n",sizeof(long int));
    printf("size of long long int is %d\n",sizeof(long long int));
    printf("size of char is %d\n",sizeof(char));
    printf("size of _Bool is %d\n",sizeof(_Bool));
    printf("size of float is %d\n",sizeof(float));
    printf("size of double is %d\n",sizeof(double));
    printf("size of long double is %d\n",sizeof(long double));

    return 0;
}

运行结果

在这里插入图片描述
signed (有符号) VS unsigned(无符号)

取值范围

比特位:CPU能读懂的最小单位,bit b
字节:内存机构的最小寻址单位,Byte B
关系:一个字节等于八个比特位 1 Byte = 8 bit
所以一个字节可以表示的最大数字就是11111111(二进制)=255(十进制)=FF(十六进制)

补充:
pow() 函数

功能:pow()函数用来求x的y次幂,然后将结果返回

原型为double pow(double x,double y);设输出为Z,Z=x^y

头文件:#include<math.h>

例子:求32个字节代表多少?(2^32-1, 利用pow()函数计算)

#include <stdio.h>
#include <math.h>

int main()
{
    int result = pow(2,32) - 1;

    printf("result = %d\n",result);

    return 0;
}

运行结果
在这里插入图片描述
对比计算器计算结果
在这里插入图片描述
我们发现两者不一致,编译器发出警告
E:\c++\1\pow\main.c|6|warning: overflow in conversion from ‘double’ to ‘int’ changes value from ‘4.294967295e+9’ to ‘2147483647’ [-Woverflow]|
意思是有数据溢出,因为我们直接用Int表示的是带符号位的整型,他的最高位用来表示数字的正负,所以我们这里应该使用无符号位的整型来表示。
在这里插入图片描述修改代码

#include <stdio.h>
#include <math.h>

int main()
{
    unsigned int result = pow(2,32) - 1;

    printf("result = %u\n",result);

    return 0;
}

修改部分:
注意:无符号位的要用%u表示。
在这里插入图片描述
在这里插入图片描述修改后运行结果:

运行结果
运行结果发现与计算结果一致。

补充数据类型对应的取值范围:

在这里插入图片描述设置 int类型就是默认signed int (不过还是要注意,可能有些编译器默认的数据类型不一样)
例:

#include <stdio.h>

int main()
{
    char height;
    
    height = 180;
    printf("姐姐的腿长%d厘米\n",height);

    return 0;
}

运行结果
在这里插入图片描述
发现居然出现了负数!!!为什么呢???

因为我们存放长度都是正数,所以我们需要用unsigned类型来确存放的数值为正数。
修改代码:
在这里插入图片描述

#include <stdio.h>

int main()
{
    unsigned char height;

    height = 180;
    printf("姐姐的腿长%d厘米\n",height);

    return 0;
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值