C语言 — 数据类型:字节长度、取值范围

一、数据类型分类

基本数据类型(内置数据类型:编译器自带的类型):int、short、long、long long[c99版本提出]、char、float、double
复合数据类型(多个内置类型组成的新类型):数值、结构体[struct]、共用体[union]、枚举[enum]
void类型:void * (万能指针):可以接受任意类型指针的值——可以用来实现C语言的多态

二、定义变量(注意事项:编码规范)

1.变量的可读性(例:int sum_result,看到变量就大概知道它的意义)
C语言命名:形容词_名词(小写,不能用拼音命名)
2.一般变量不要用单个字母,循环变量可以用单个字母

三、基本数据类型需掌握的知识点

1.各种数据类型的字节长度(变量占用内存的大小:字节)
计算机表示内存大小的单位:位[ bit ]、字节 [ Byte ]、半字[ half word ]、字[ word ]、双字、千字节[ KB ]、兆[ MB ]、千兆[ G/GB ]、千千兆[ T/TB ]
各内存单位之间的换算
1 字节 = 8 位,16位 = 2个字节 = 半字,32位 = 4个字节 = 1字,64位 = 8个字节 = 双字,
1024 KB = 1 MB,1024 MB = 1 GB,1024 GB = 1 TB
1 KB = 1024 Byte(字节) = 8*1024 bit

如何测量数据类型的大小?
使用sizeof( )。sizeof( )计算数据类型和变量的内存大小。sizeof( )是运算符不是函数,返回的是一个无符号的长整型。
不同编译器下基本数据类型大小不一样。

//可以使用以下代码进行测试
#include<stdio.h>

int main()
{
    printf("int = %ld", sizeof(int));
    printf("char = %ld", sizeof(char));
    printf("short = %ld", sizeof(short));
    printf("long = %ld", sizeof(long));
    printf("float = %ld", sizeof(float));
    printf("double = %ld", sizeof(double));
    
    return 0;
}

指针的长度:8个字节(固定长度,无论什么类型的指针)
原因:指针是保存地址的,操作系统中地址的长度是固定的,是由操作系统位数决定,64位系统是8个字节,32位系统是4个字节
数组的长度:数据长度 × 元素类型的长度
字符串的长度:用strlen( )来测量,用sizeof( )无法测量。
strlen( )统计字符串中字符的个数。
例:int strlen(char *src),不统计字符串的"\0"。

//以下代码可以看出sizeof()和strlen()的区别
char *ptr = "hello world";

printf("sizeof(ptr) = %ld\n",sizeof(ptr));   //测量的是ptr指针变量的结果
printf("strlen(ptr) = %ld\n",strlen(ptr));

结果:
sizeof(ptr) = 8
strlen(ptr) = 11

四、各种数据类型的取值范围

注:以下都以8位进行举例
计算机是以补码形式保存数据。这样是为了解决“+0”和“-0”问题,数学没有“+0”和“-0”。
计算机有三种码:原码、反码、补码。
计算机内保存一个数是保存的是补码
正数:
原码 = 补码
负数:
补码 = 原码取反 + 1
原码 = 补码取反[符号不变] + 1(计算机不做减法,只做加法)

无符号类型的取值范围
在这里插入图片描述
所以unsigned char的最小值为0,最大值为255。
最大值计算有简便方法:在末尾位加一,使其变成100000000,算出结果后减一,所以其结果为2^8 - 1 = 255
有符号的不可以用以上方法计算。

有符号类型的取值范围
signed char取值范围:-128 ~ 127
正数:
0 000 0000 = 0
0 111 1111 = 127
负数:
1 000 0000
取反 111 1111
加一 +1
结果:2^7=128,加上符号位就是 -128

1 111 1111
取反 000 0000
加一 +1
结果:1 * 2^0 = 0,加上符号位就是 -1
综合以上:signed char取值范围为 -128 ~ 127

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值