【C语言】数据类型

news2024/9/22 5:34:01

文章目录

  • c语言的类型
  • 整数
    • 整数类型
    • 整数的内部表达
    • 整数的范围
    • unsigned
    • 整数的格式化
  • 浮点型
    • 浮点类型
    • 输入输出
    • 输出精度
  • 字符类型
    • 逃逸字符
  • 类型转换
    • 自动类型转换
    • 强制类型转换
  • 逻辑类型bool
  • 逻辑运算
  • 条件运算符


C语言的变量,必须在使用前定义,并且确定类型;
C+ +/Java更强调类型,对类型的检查更严格;
JavaScript、 Python、PHP不看重类型,甚至不需要事先定义。

c语言的类型

C语言的类型

① 整数:char、short、int、long、longlong
② 浮点数:float、double、long double
③ 逻辑:bool
④ 指针
⑤ 自定义类型

类型有何不同

① 类型名称:int、long、double
② 输入输出时的格式化:%d、%ld、%lf
③ 所表达的数的范围:char < short < int < float < double
④ 内存中所占据的大小:1个字节到16个字节
⑤ 内存中的表达形式:二进制(补码)、编码

sizeof

① 是一个运算符,得到某个类型或变量在内存中所占据的字节数,eg:sizeof(int),sizeof(i);
② 是静态运算符,它的结果在编译时刻就决定了;
③ 不能在sizeof的括号里做运算,这些运算不会执行。

整数

整数类型

① char:1字节(8比特)
② short:2字节(16比特)
③ int:取决于编译器(CPU),通常的意义是“1个字”,如:4字节(64位编译器),8字节(32位编译器)
④ long:取决于编译器(CPU),通常的意义是“1个字”,如:4字节(64位编译器),4字节(32位编译器)
⑤ long long:8字节

整数的内部表达

计算机内部一切都是二进制。
1个字节可以表达的数:
00000000–11111111(0–255)
1字节(byte)=8比特(bit)

整数的范围

char:1字节:-128~127
short:2字节:-32768~32767
int:取决于编译器(CPU),通常的意义是“1个字”
long:4字节
long long:8字节

unsigned

如果一个字面量常数想要表达自己是unsigned,可以在后面加u或U,eg:255U;

用|或L表示long(long),*unsigned的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要是为了移位。

整数的格式化

整数的输入输出只有两种形式:int或long long
%d:int
%u:unsigned
%ld:long long
%lu:unsigned long long

8进制和16进制:
一个以0开始的数字字面量是8进制;
一个以0x开始的数字字面量是16进制;
%o用于8进制,%x用于16进制;
8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关。

char c=012;
int i=0x12;
int j=0x1A;
printf("c=%d,i=%d\n",c,i);
printf("c=%o,i=%x\n",c,i);
printf("c=0%o,i=0x%x\n",c,i);
printf("c=0%o,i=0x%X\n",c,i);//小写的x输出小写的a,大写的X输出大写的A

输出:
c=10,i=18
c=12,i=12
c=012,i=0x12
c=012,i=0x1A

选择整数类型

① 为什么整数要有那么多种?
为了准确表达内存,做底层程序的需要
② 没有特殊需要,就选择int
a.现在的CPU的字长普遍是32位或64位,一次内存读写就是一个int,一次计算也是一个int,选择更短的类型不会更快,甚至可能更慢;
b.现代的编译器一般会设计内存对齐,所以更短的类型实际在内存中有可能也占据一个int的大小(虽然sizeof告诉你更小)
③ unsigned与否只是输出的不同,内部计算是一 样的。

浮点型

浮点类型

在这里插入图片描述
注意:趋近于0有一段范围是无法输入输出的。

带小数点的字面量是double而非float
float需要用f或F后缀来表明身份

输入输出

在这里插入图片描述

%e表示用科学计数法输出:
在这里插入图片描述

输出精度

在%和f之间加上.n可以指定输出小数点后几位,这样的输出是做4舍5入的

printf("%.3f\n", -0.0049);
printf(%.30fIn", -0.0049);
printf("%.3f\n", -0.00049);

输出:
-0.005
-0.004899……(输出小数点后30位)
-0.000

选择浮点类型:
如果没有特殊需要,只使用double;
现代CPU能直接对double做硬件运算,性能不会比float差,在64位的机器上,数据存储的速度也不比float慢。

字符类型

char是一种整数,也是一种特殊的类型:字符。
这是因为:
用单引号表示的字符字面量:‘a’,‘1’,"也是一个字符;
printf和scanf里用%c来输入输出字符。

char c;
scanf("%c",&c);
printf("c=%d\n",c);
printf("c='%c'\n",c);
输入:1
输出:
c=49
c='1'

int i;
char c;
scanf("%d",&i);
c=i;
printf("c=%d\n",c);
printf("c='%c'\n",c);
输入:49
输出:
c=49
c='1'

'1'的ASCII编码是49,所以当c==49时,它代表'1'

注意:
空格也是符号。

//两个的输出会不相同
scanf("%d %c",&i,&c);//读完整数一起把后面空格读了,再读字符
scanf("%d%c",&i,&c);//如果中间有空格,则第二个输出的是空格而不是后面的字符

字符计算:
一个字符加一个数字得到ASCII码表中那个数之后的字符;
两个字符的减,得到它们在表中的距离。

大小写转换:

字母在ASCII表中是顺序排列的;
大写字母和小写字母是分开排列的,并不在一起;
‘a’-'A’可以得到两段之间的距离,于是
a+‘a’-'A’可以把一个大写字母变成小写字母
a+‘A’-'a’可以把一个小写字母变成大写字母

逃逸字符

用来表达无法印出来的控制字符或特殊字符,它由一个反斜杠“\”开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符。

在这里插入图片描述

双引号里面不能直接出现双引号。

printf("收到请回复,""回复"1"表示同意");
//这样表示有三段分开的双引号
输出:收到请回复,回复1表示同意

printf("收到请回复,""回复\"1\"表示同意");
//加上\表示前面一段双引号,后面一段双引号的中间包含一段双引号
输出:收到请回复,回复"1"表示同意

制表位
一个\t使得输出从下一个制表位开始;
用\t才能使得上下两行对齐。

printf("123\t456"\n);;
printf("12\t3456"\n);

输出:
123	456
12	3456

类型转换

自动类型转换

当运算符的两边出现不一致的类型时, 会自动转换成能表达的数的范围更大的类型:
char-> short-> int-> long-> long long
int-> float-> double

注意:
对于printf, 任何小于int的类型(char,short)会被转换成int;float会被转换成double。
但是scanf不会,要输入short,需要%hd……

强制类型转换

要把一个量强制转换成另一个类型(通常是较小的类型),需要:(类型)值
(int)10.2
(short)32
注意这时候的安全性,小的变量不能表达大于它范围的量。
eg:(short)32768,short类型能表示的最大值是32767.

强制类型转换只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变。

强制类型转换的优先级高于四则运算

int a=5;
int b=6;
double d=(double)(a/b);

逻辑类型bool

添加头文件#include<stdbool.h>
之后就可以使用bool和true、false

#include<stdio.h>
#include<stdbool.h>
int main(){
	bool a=6>5;
	bool b=6<5;
	bool c=true;
	bool d=false;
	bool e=0;
	bool f=5;//非零输出1
	printf("%d %d\n%d %d\n%d %d",a,b,c,d,e,f);
	return 0;
}

输出:
1 0
1 0
0 1

逻辑运算

逻辑运算是对逻辑量进行的运算,结果只有0或1;
逻辑量是关系运算或逻辑运算的结果。
在这里插入图片描述

短路:
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算。
对于&&,左边是false时就不做右边了
对于||,左边是true时就不做右边了

int a=6;
if(a>7&&a++>9){//对于&&,左边false不成立了就不执行右边了
	printf("OK\n");
}
if(a<7||a++>9){//对于||,左边true成立了就不执行右边了
	printf("OK\n");
}

不要把赋值,包括复合赋值组合进表达式。

条件运算符

条件 ? 条件满足时的值 : 条件不满足时的值

x=(a>b)?a-1:0 //x的值在a>b时=a-1,否则=0

if(a>b)
	x=a-1;
else
	x=0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu下使用doxygen生成软件文档

ubuntu下使用Doxygen生成软件文档一、软件下载1.系统安装Doxygen2.Vscode插件安装二、软件配置三、文档生成1.方法1&#xff1a;使用Doxygen-gui生成&#xff08;推荐&#xff09;2.方法&#xff1a;采用Doxygen命令&#xff08;不推荐&#xff09;另外Windows下使用方法提示&a…

【JavaScript】 Date 日期对象概述及相关方法

文章目录【JavaScript】 Date 日期对象的创建及相关方法一. 日期对象的创建二. 日期对象的相关方法三. 时间戳案例案例1&#xff1a;在页面上展示一个时钟&#xff0c;隔1s更新一次案例2&#xff1a;距离除夕倒计时【JavaScript】 Date 日期对象的创建及相关方法 一. 日期对象…

ArcGIS基础:构建点对连线表达点集内部相互关系

原始数据如下&#xff0c;为普通的点图层&#xff0c;总共是21个点。 点位分布如下&#xff1a; 属性表打开如下&#xff1a; 下面使用【构造视线】工具进行操作&#xff0c;其工具位于【3D分析工具】下的【可见性】工具栏。 打开【构造视线】对话框&#xff0c;把【视点…

Leetcode【494. 目标和】

题目描述 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之前添加 ‘-’ &…

第10章 角色页的分页、排序、查询实现

1 重构WebApi.Controllers.RoleController. PostRolePageByFromBodyAsync //把所有符合条件的角色实例&#xff0c;按照指定字段进行排序操作。 if (!string.IsNullOrEmpty(pagination.OrderByFiled)) { var _obj JsonConvert.DeserializeAnonymousType(pagination.OrderByFil…

力扣 2351. 第一个出现两次的字母

题目 给你一个由小写英文字母组成的字符串 s &#xff0c;请你找出并返回第一个出现 两次 的字母。 注意&#xff1a; 如果 a 的 第二次 出现比 b 的 第二次 出现在字符串中的位置更靠前&#xff0c;则认为字母 a 在字母 b 之前出现两次。 s 包含至少一个出现两次的字母。 …

TopK问题的必会解法

目录经典解法&#xff0c;创建K个大小的堆不考虑空间的暴力排序做法不考虑空间的快排partition变形减治法思想(核心&#xff1a;找第K大的数)空间有限放不下&#xff0c;海量数据的分治法经典解法&#xff0c;创建K个大小的堆 传统的直接建立一个K个元素的小顶堆&#xff0c;类…

推荐两款可以将图片无损放大的在线工具

文章目录一、waifu2x网站预览传送地址二、BigJPG网站预览传送地址好不容易找到合适的图片素材但尺寸太小&#xff1f;那这里的工具正好适合你&#xff0c;能把你的小图放大几倍都不模糊。 一、waifu2x 本程序使用卷积神经网络对动漫风格的图片进行放大操作&#xff08;支持照…

再聊一下那 SQLSERVER 行不能跨页的事

一&#xff1a;背景 1. 讲故事 上一篇写完了之后&#xff0c;马上就有朋友留言对记录行的 8060byte 限制的疑惑&#xff0c;因为他的表记录存储了大量的文章&#xff0c;存储文章的字段类型用的是 nvarchar(max)&#xff0c;长度很显然是超过 8060byte 的&#xff0c;请问这个…

win10搭建 IIS 服务器

第一步: 打开程序和功能 找到 Internet 这个 勾选web管理工具和万维网服务 第二步: 在本地电脑创建一个文件夹(不要有中文空格等特殊字符) index.html 是默认访问的网址 第三步 关联访问的链接 选择本地物理路径 访问测试 第四步 修改绑定端口 第五步 修改防火墙 …

Linux | 文件操作的系统调用 open() read() write()

1. 基本含义辨析 文件操作的系统调用 open read write close &#xff08;系统调用&#xff1a;实现在内核中【用户态->内核态】—“陷入内核”&#xff09; man&#xff1a; 1 命令 2 系统调用 3 库函数 C操作文件的库函数 fopen fread fwrite fclose &#xff08;fo…

一个有意思的图片鼠标切换

做淘宝活动页面的时候&#xff0c;用到最多的就是锚点&#xff0c;一个图片标签&#xff0c;然后不断地在上面画热区。不过我想问的是有多少人研究过&#xff0c;用矩形画热点&#xff0c;四个坐标值各自表示的含义&#xff0c;还有它和background-position有什么相同或相似的地…

JavaWeb:RequestResponse的概述

1&#xff0c;Request和Response的概述 Request是请求对象&#xff0c;Response是响应对象。 这两个对象在我们使用Servlet的时候有看到&#xff1a; 此时&#xff0c;我们就需要思考一个问题request和response这两个参数的作用是什么&#xff1f; request&#xff1a;获取请…

RapidUp: Multi-Domain Permutation Protocol for Lookup Tables学习笔记

1. 引言 前序博客有&#xff1a; PLOOKUPPLOOKUP代码解析Efficient polynomial commitment schemes for multiple points and polynomials学习笔记PLONK PLOOKUPPlonKup: Reconciling PlonK with plookupPLONK: permutations over lagrange-bases for oecumenical nonintera…

2022年就要过去了,我的这份成绩单请您查收……

喜迎元旦岁月不居&#xff0c;时节如流年关交迭在即在2022行将尾声的此时想静静地坐下片刻和关注了云和恩墨这么久的老朋友们细数一遍这光阴里的纷纷呈呈这一年&#xff0c;充满了挑战与艰辛但所有努力和守望终有结果收成这一年&#xff0c;我们全心投入产品研发收获了更多的荣…

【隔离器使用说明】光隔、磁隔、容隔三兄弟介绍

文章目录前言一、三种常用隔离技术1. 光隔离2. 变压器隔离/磁隔3. 电容隔离二、隔离器重要指标1. 隔离电压值2. 爬电距离3. 共模瞬变抗扰度CMTI三、隔离器性能对比总结前言 本文简单介绍常用隔离器的类型和特点&#xff0c;是根据网络知识整理出来的 有错误的话请一定评论留言…

谈谈SpringBoot

1. Spring Boot 简介 简化Spring应用开发的一个框架&#xff1b; 整个Spring技术栈的一个大整合&#xff1b; J2EE开发的一站式解决方案&#xff1b; 2. HelloWorld 功能&#xff1a;浏览器发送hello请求&#xff0c;服务器接受请求并处理&#xff0c;响应Hello World字符串&a…

UE5笔记【十五】漂流者游戏制作【二】雕刻一个峡谷+增加水体

雕刻峡谷 我们希望角色从一个峡谷中开始。 用上一节中&#xff0c;我们配置的Auto图层&#xff0c;雕刻两条山脉&#xff0c;从而雕刻出一条峡谷。然后切换到选择模式下。我们找到PlayStart&#xff0c;然后将其移动到峡谷中&#xff0c; 然后按F切换到角色位置&#xff0c;调…

【C++基础】09:STL(一)

STL&#xff08;一&#xff09; OVERVIEWSTL&#xff08;一&#xff09;一、STL初识1.STL六大组件&#xff1a;2.容器&迭代器&#xff1a;二、STLGroup11.string容器&#xff1a;&#xff08;1&#xff09;基本概念&#xff1a;&#xff08;2&#xff09;string构造函数&am…

前端性能优化(三):代码优化

目录 一&#xff1a;JS开销以及如何缩短解析时间 二&#xff1a;配合V8有效优化代码 2.1.抽象语法树 2.2.V8优化机制 三&#xff1a;函数优化 四&#xff1a;对象优化 4.1.以相同顺序初始化对象成员&#xff0c;避免隐藏类的调整 4.2.实例化后避免添加新属性 4.3.尽量…