c基础语法02

c基础语法02

1.数据类型

在 C 语言里,所谓的数据类型就是坑的大小。我们说变量就是在内存里边挖一个坑,然后给这个坑命名。那么数据类型指的就是这个坑的尺寸。C 语言允许使用的类型如下:

img

int、float、double、char、_Bool、enum;

short 和 long

我们可以为这些基本数据类型加上一些限定符,比如表示长度的 short 和 long。比如 int 经过限定符修饰之后,可以是 short int,long int,还可以是 long long int(这个是 C99 新增加的)。

img

这里需要说的是,这里 C 语言并没有限制 int 的坑具体要挖多大,short int 或 long int 的坑又要挖多大。标准只是要求:short int <= int <= long int <= long long int。

sizeof 运算符

sizeof 用于获得数据类型或表达式的长度,它有三种使用方式:

  • sizeof(type_name); //sizeof(类型);
  • sizeof(object); //sizeof(对象);
  • sizeof object; //sizeof 对象;
#include <stdio.h>
int main()
{
printf("int = %d\n",sizeof(int));
printf("short int = %d\n",sizeof(short int));
printf("long int = %d\n",sizeof(long int));
printf("long long int = %d\n",sizeof(long long int));
printf("char = %d\n",sizeof(char));
printf("_Bool = %d\n",sizeof(_Bool));
printf("float = %d\n",sizeof(float));
printf("double = %d\n",sizeof(double));
printf("long double = %d\n",sizeof(long double));
return 0;
}

signed 和 unsigned

还有一对类型限定符是 signed 和 unsigned,它们用于限定 char 类型和任何整型变量的取值范围。

signed 表示该变量是带符号位的,而 unsigned 表示该变量是不带符号位的。带符号位的变量可以表示负数,而不带符号位的变量只能表示正数,它的存储空间也就相应扩大一倍。默认所有的整型变量都是 signed 的,也就是带符号位的。

因此加上 signed 和 unsigned 限定符,四种整型就变成了八种:

  • [signed] short [int]
  • unsigned short [int]
  • [signed] int
  • unsigned int
  • [signed] long [int]
  • unsigned long [int]
  • [signed] long long [int]
  • unsigned long long [int]
#include <stdio.h>
int main()
{
short i;
unsigned short j;
i = -1;
j = -1;
printf("%d\n",i);
printf("%u\n",j);
return 0;
}

2.取值范围

比特位和字节

CPU 能读懂的最小单位(只能存放 0 和 1)—— 比特位,bit,b

内存机构的最小寻址单位 —— 字节,Byte,B

关系:1Byte == 8bit

因此,一个字节可以表示最大的数是:11111111
二进制、十进制和十六进制

img
符号位

存放 signed 类型的存储单元中,左边第一位表示符号位。如果该位为 0,表示该整数是一个正数;如果该位为 1,表示该整数是一个负数。

一个 32 位的整型变量,除去左边第一位符号位,剩下表示值的只有 31 个比特位。

#include <stdio.h>
#include <math.h>
int main()
{
unsigned int result = pow(2,32) - 1;
printf("result = %d\n",result); //result = -1
printf("result = %u",result); //result = 4294967295
return 0;
}

补码

计算机是用补码的形式来存放整数的值。

正数的补码是该数的二进制形式。

负数的补码需要通过以下几步获得:

  • 先取得该数的绝对值的二进制形式
  • 再将第1步的值按位取反
  • 最后将第2步的值加1

img
二进制表示最大值和最小值

img
基本数据类型的取值范围

img

img

3.字符和字符串

#include <stdio.h>
int main()
{
char a = 'C';
printf("%c = %d\n",a,a);
return 0;
}

字符类型事实上是一个特殊的整数类型

字符类型事实上是一个特殊的整型,因此它也有取值范围,signed char 的取值范围是 -128 ~ 127;unsigned char 的取值范围是 0 ~ 255。

字符类型与普通整数类型的不同之处

C 标准规定普通整数类型默认使用 signed 修饰符,但没有规定 char 的默认修饰符。因此,使用 signed 或 unsigned 修饰符,是由编译系统自行决定。

存放在字符类型中的变量,都可以被解释为 ASCII 字符表中的对应字符

ASCII 字符表 -> 传送门

标准 ASCII 字符表使用7位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。

其中,ASCII 字符表上的数字 0 ~ 31 以及 127(共 33 个)分配给了控制字符,用于控制像打印机等一些外围设备。这些是看不到的。数字 32 ~ 126 分配给了能在键盘上找到的字符,这些是所见即所得的。

#include <stdio.h>
int main()
{
char a=84,b=97,c=110,d=84,e=97,f=111;
printf("%c%c%c%c%c%c\n",a,b,c,d,e,f);
return 0;
}

字符串

C 语言没有专门为存储字符串设计一个单独的类型,因为没必要。我们之前已经说过,字符串事实上就是一串字符。所以只需要在内存中找一块空间,然后存放一串字符类型的变量即可。

声明字符串的语法:

char 变量名[数量];

对其进行赋值,事实上就是对这一块空间里边的每一个字符变量进行赋值。我们通过索引号来获得每个字符变量的空间。

变量名[索引号] = 字符;

比如:

char name[7];
name[0] = 'T';
name[1] = 'a';
name[2] = 'n';
name[3] = 'T';
name[4] = 'a',
name[5] = 'o',
name[6] = '\0';

当然,我们可以把声明和定义写在一块,语法是这样的:

char name[7] = {'T', 'a', 'n', 'T', 'a', 'o', '\0'};
printf("%s\n",name);

其实,中括号([])里边的数量咱可以不写,编译器会自动帮你计算的。

char a[] = {'T', 'a', 'n', 'T', 'a', 'o', '\0'};

事实上可以直接在大括号写上字符串常量,字符串常量用双引号括起来,还记得吧:

char a[] = {"TanTao"};

使用字符串常量有个好处,那就是你不必亲自在末尾添加 '\0',它会自动帮你加上。

最后,如果使用字符串常量的话,这个大括号也是可以省掉的:

char a[] = "TanTao";
posted @   tantao0_0  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示