#C语言#6.1 数据类型 笔记
变量
·C语⾔的变量必须:在使⽤前定义,并且确定类型,但是对于类型安全的检查并没有那么严格
语言的发展:C++/JAVA (底层语言)对检查更加严格
JavaScript、Python、PHP(应用语言)不看重类型不需要事先定义
支持观点:有利于发现简单的错误
反对观点:强调类型迫使程序员面对底层、实现而非事务逻辑
·C语言的类型
整数• char、short、int、long、long long
浮点数• float、double、long double
逻辑 •bool
指针
自定义类型
1.类型有何不同
类型名称:int、long、double
输⼊输出时的格式化:%d、%ld、%lf
所表达的数的范围:char < short < int < float < double
内存中所占据的⼤⼩:1个字节到16个字节
内存中的表达形式:⼆进制数(补码)、编码(编码和补码是不同的有时候不能直接做运算)
2.sizeof(变量)
运算符,给出某个类型或变量在内存中所占据的字节数
静态的运算符号,直接决定结果的类型,它的结果在编译时刻就决定了
不要在sizeof的括号⾥做运算,这些运算不会做的
** 3.观察类型大小**
32位的编译器和64位的编译器是不一样的
·整数
• char:1字节(8⽐特)
• short:2字节
• int:取决于编译器(CPU),通常的意义是“1个字”
• long:取决于编译器(CPU),通常的意义是“1个字”
• long long:8字节**
(·字长——每一个寄存器(Reg)一次可以处理的数据/总线上一次可以运输的数据就是字长)
1.整数的内部表达(二进制的)
重点:我们以什么类型来看待过
2.表达负数(补码)
巧妙运用看不见的思路
补码:(数字只有8位,所以进位到9位最前面的一位就要被丢掉)
11111111 + 00000001 —> 100000000(最前面的那个1要被舍掉)
00000000 - 00000001 —> 11111111 (补码)
11111111被当作纯⼆进制看待时,是255,被当作补码看待时是-1
补码的意义就是拿补码和原码可以加出⼀个溢出的“零”(加法的时候不用变号)
3.一堆话总结整数表达
• 对于⼀个字节(8位),可以表达的是:
• 00000000 - 11111111
• 其中00000000 —> 0 11111111 ~ 10000000 —> -1 ~ -128(纯二进制和补码都回有区别) 00000001 ~ 01111111 —> 1 ~ 127
计算机中储存的是纯二进制,但是你要怎么看待(纯二进制?Or 补码?)
·整数的范围
• char:1字节:-128 ~ 127
• short:2字节:-32768 ~ 32767
• int:取决于编译器(CPU),通常的意义是“1个字” ()相减就是256
• long:4字节
• long long:8字节
·想要当成纯二进制看待——unsigned
在整形类型前加上unsigned使得它们成为⽆符号的整数,内部的⼆进制表达没变,变的是如何看待它们
Unsigneded在正数部分会被扩大
如何输出——eg:11111111
对于char,是-1,对于unsigned char,是255
00000000~11111111(0-255 ?or -128~127)
·表达成unsigned的方法
如果⼀个字⾯量常数想要表达⾃⼰是unsigned,可以在后⾯
(1)加u或U 255U
(2)⽤l或L表⽰long(long)
*unsigned的初衷并⾮扩展数能表达的范围,⽽是为了做纯⼆进制运算,主要是为了移位
·整数越界
整数是以纯⼆进制⽅式进⾏计算的,所以:
11111111 + 1 —> 100000000 —> 0
01111111 + 1 —> 10000000 —> -128
10000000 - 1 —> 01111111 —> 127
·整数的输入输出——以不同的方式看就能得到不同的结果
只有两种形式: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进制只是如何把数字表达为字符串,与内部如何表达数字⽆关
·如何选择整数类型(没有特别的需要就用int)
• 为什么整数要有那么多种?为了准确表达内存,做底层程序的需要(和硬件相关联)
• 没有特殊需要,就选择int
·浮点类型·
·含义·
靠近0的那些极小的数字不能表达
±inf正负无穷大
nan不是一个有效数字
【检验方法——除以0】
·浮点的输入输出·
1.
EG:
ff=1234.56789
%e——1.23456e+03***【%e——输出的是科学计数的法】***
%f——1234.567890
%.16f——百分号后面输出16位小数【输出精度:在%和f之间加上**.n**可以指定输出⼩数点后⼏位,这样的输出是做4舍5⼊的】
浮点是可以表示无穷大,但是整数不能表示无穷大。
2.浮点运算的精度
计算钱的时候不要用浮点数 因为后面的误差会有误差累计
3.浮点数的内部表达【不是二进制数字 是编码数字】
1bit表达±符号
11bit表达指数大小
52bit 表达分数部分
【浮点数在计算时是由专⽤的硬件部件实现的】
【计算double和float所⽤的部件是⼀样的】
4.选择浮点类型
•如果没有特殊需要,使⽤double
【现代CPU能直接对double做硬件运算,性能不会⽐float差,在64位的机器上,数据存储的速度也不⽐float慢】
字符类型
1.char是⼀种整数,也是字符。
• ⽤单引号表⽰的字符字⾯量:‘a’, ‘1’
•'xxxxxx’也是⼀个字符
• printf和scanf⾥⽤%c来输⼊输出字符
大概可以理解为——字符有两重身份,一面是整数,一面是字符,就跟学号和名字的感觉。
·把字符输出成计算机中指代的数字。
Printf(“d=%d\n”,d);
输出字符:
Printf(“‘%c’/n”,c);
如果读入的是有何不同?
• scanf("%d %c", &i, &c);
• scanf("%d%c", &i, &c);——只读到整数为止 后面是啥就读啥
2.利用字符二面性作⼤⼩写转换
• 字⺟在ASCII表中是顺序排列的
• ⼤写字⺟和⼩写字⺟是分开排列的,并不在⼀起
• ‘a’-‘A’可以得到两段之间的距离,于是a+’a’-‘A”可以把⼀个⼤写字⺟变成⼩写字⺟,⽽a+’A’-‘a’可以把⼀个⼩写字⺟变成⼤写字⺟
*3.逃逸字符——*
*原来的字符在语句本身是有意义的(不能当作字符执行),要他在语句中变成一个字符,需要在前面加上一个*
⽤来表达⽆法印出来的控制字符或特殊字符,它由⼀个反斜杠“\”开头,后⾯跟上另⼀个字符,这两个字符合起来,组成了⼀个字符
\b----回去但是不删除
·类型转换
1.⾃动类型转换
• 当运算符的两边出现不⼀致的类型时,会⾃动转换成较⼤的类型
• char —> short —> int —> long —> long long
• int —> float —> double
特别——printf
对于printf,任何⼩于int的类型会被转换成int;float会被转换成double;但是scanf不会,要输⼊short,需要%hd
2.强制转换——大的范围往小的范围转
(类型)值
强制类型转换的优先级⾼于四则运算
#C语言#6.1 数据类型 笔记相关推荐
- 《Go语言圣经》学习笔记 第四章 复合数据类型
<Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...
- 《Go语言圣经》学习笔记 第三章 基础数据类型
<Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...
- 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)
前言: 如果你正在学习C语言而又不知道从何处开始学,你可以跟着我一起学习C语言,在寒假期间我每天都会发一篇博客,里面有各种C语言的知识点,如果你想学习下去,想进步,就来每天跟着我一起打卡吧,期待我们能 ...
- 《Go语言圣经》学习笔记 第十一章 测试
<Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...
- 《Go语言圣经》学习笔记 第十章 包和工具
<Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...
- 《数据结构与算法 Python语言描述》 读书笔记
已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...
- C语言深度解剖读书笔记
开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客.正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- VS2017 常用函数与数据类型-笔记
一.MFC入门常用函数和数据类型笔记 CString:MFC控件从面板上得到数据一般是CString GetDlgItem(控件ID)->GetwindowText(CString字符串):获取 ...
- c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)
1.整型常量的的前缀:(1)十进制常数无前缀. (2)八进制常数前缀为0,八进制常数无符号. (3)十六进制常数前缀为0X或0x. 注:在程序中是根据前缀来区分各种进制数的.因此在书写常数时不要把前缀 ...
最新文章
- Microstation研发
- oracle 三列数值相加,Oracle SQL/PLSQL:按货币拆分和求和值的分层查询
- asp.net中退出登陆的相关问题(解决后退或直接粘贴地址进入网页的问题)
- win10c语言错误,win10打开程序提示错误状态0xc0000020的原因和解决方法
- JAVA EE常见英文单词(一)
- sketchup生成面域插件_什么插件这么神奇,SketchUp一秒搞定99%异形建模
- 利用Python自动生成小学生加减乘除口算考试题卷
- 如何成为一个游戏制作人——第5.5章一个小游戏的框架
- Drupal view实现排序:未来升序,过去降序
- 很好用的搜网盘资源工具。很多都能找到
- 神策数据虚席以待,欢迎加入!
- android 程序运行,Android如何保持程序一直运行
- 使用opencv-python读取多个(海康\华为)网络摄像头的视频流,解决实时读取延迟问题
- python3爬取网页AJAX数据
- java中的tomcatserverlet
- 教师资格证2023年报名时间来了!
- 自学MATLAB(四):特征值与特征向量
- H5网页如何在微信中自定义分享链接
- 小白入门IT不知道改选哪门技术?Java是你的不二之选
- 晶闸管|Thyristor(半控型器件)
热门文章
- 如何培养创造性思维能力
- 银行软件测试论文参考文献,软件测试毕业论文参考文献.doc
- HTML页面中条形码或二维码扫描枪的使用
- HTML空白字符占位问题
- IOU破局之路 | Focal EIOU:打破IOU/GIOU/CIOU的局限
- 推荐系统中的bais系统(二)—Select Bais和Exposure Bias
- 相关系数与决定系数的关系
- Word怎么添加页码
- JavaWeb网上图书商城
- JS学习之路系列总结四象阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)...