图片[1]yxqz基本数据类型扩展yxqz小余塘

 

作者:余小小

日期:2021-10-02

 

有符号和无符号

相对于二进制数值考虑

  1. 有符号,则可以定义负数,这个符号可以简单的理解成负号,但是真的意义是指的是符号位的具体数值

  2. 在二进制中,最高位是符号位,也就是最左边的的值

  3. 如果是0,则是正数,如果是1则是负数

两个关键词:

  • 符号:signed,sign:记号,标记,ed,名词后缀,那么则是有符号的,signed

  • 无符号:unsigned,un:否定前缀,则是无符号的.

在c语言中中,所有的数值类型,都是默认的有符号的数据类型,也就是说默认都是有signed关键词修饰的

整数类型

参考:C 数据类型 | 菜鸟教程 (runoob.com)

类型 存储大小 值范围
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主

重点明白,c语言中是可以定义负数的

浮点类型

数据类型 占用大小
float 单精度浮点 【常用】 4 字节 取值范围(1.2E-38 到 3.4E+38 )6 位小数
double 双精度浮点 【常用】 8 字节 取值范围 (2.3E-308 到 1.7E+308 )15 位小数
long double 16 字节 取值范围(3.4E-4932 到 1.1E+4932 )19 位小数

之前了解过浮点类型,这里补充一下需要注意的地方:

  1. 在c语言中小数常量默认为double型在内存中存储

  2. 为了区分是float还是double,在定义的小数后面使用相关的字符来区分,比如float的后缀f,int a =1.1f;

相关的占位符:

  1. 浮点数的占位符:%f,

  2. float和double在printf中都是使用的%f来占位

  3. 如果需要精确到某个精度范围,那么参考:%.2f(小数后两位),也可以%0.2f,但是一般都是省略0

  4. 在后面将要接触到的scanf中,浮点数的占位符号是:%lf

根据”默认参数提升”规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。

对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

C中的字符串

字符串在c是特殊的存在,那么字符串是啥类型呢

在这里插入图片描述

从图中查看,并没有看到有字符串字样,那么,为何c语言在printf中还是的有%s的占位符,来给String字符串使用呢

第一个原因:字符串的使用量是最大的,也就是在实际的编程中,频繁使用到字符串

第二个原因:c语言在创建数据类型的时候,考虑到字符串所占用的内存空间比较大,所以底层使用的数组来实现字符串

所以,字符串就是数组,进一步的说,字符串是字符数组,所以,字符串是属于构造类型中的一种,且是数组

关于数组 ,后面详细解释

C中的“布尔类型”

C语言里,是没有bool类型的,所以 C 语言判断真假时以 0 为假,非 0 为真(一般用1)

C99 提供了 Bool 型,所以布尔类型可以声明为 _Bool flag。 _Bool 依然仍是整数类型,但与一般整型不同的是,Bool 变量只能赋值为 0 或 1,非 0 的值都会被存储为 1。 C99还提供了一个头文件 <stdbool.h> 定义了 bool 代表 _Bool,true 代表 1,false 代表 0。 只要导入 stdbool.h ,就能非常方便的操作布尔类型了

#include <stdio.h>
//导入 stdbool.h 来使用布尔类型
#include <stdbool.h>
//计算n!,n的值在main中定义
int main ()
{
 int n = 10;    //计算叠乘数
 int sum = 1; //用来存放叠乘的结果
 bool flag = false;    //叠乘标记
 
 int num = n;    //循环次数
 while( !flag )
{
  sum = sum * (num--);
  //当num=1时结束循环
  if( num == 1)
  {
   flag = true;
  }
}
 printf ("%d的叠乘值为 %d \n", n, sum);
 return 0;
​
}
​

 

文章版权声明 1、本网站名称:小余塘
2、本站永久网址:https://www.yxqz.top/
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ2457431511进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容