变量


·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 数据类型 笔记相关推荐

  1. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  2. 《Go语言圣经》学习笔记 第三章 基础数据类型

    <Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...

  3. 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)

    前言: 如果你正在学习C语言而又不知道从何处开始学,你可以跟着我一起学习C语言,在寒假期间我每天都会发一篇博客,里面有各种C语言的知识点,如果你想学习下去,想进步,就来每天跟着我一起打卡吧,期待我们能 ...

  4. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  5. 《Go语言圣经》学习笔记 第十章 包和工具

    <Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...

  6. 《数据结构与算法 Python语言描述》 读书笔记

    已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...

  7. C语言深度解剖读书笔记

    开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客.正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下 ...

  8. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  9. VS2017 常用函数与数据类型-笔记

    一.MFC入门常用函数和数据类型笔记 CString:MFC控件从面板上得到数据一般是CString GetDlgItem(控件ID)->GetwindowText(CString字符串):获取 ...

  10. c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)

    1.整型常量的的前缀:(1)十进制常数无前缀. (2)八进制常数前缀为0,八进制常数无符号. (3)十六进制常数前缀为0X或0x. 注:在程序中是根据前缀来区分各种进制数的.因此在书写常数时不要把前缀 ...

最新文章

  1. Microstation研发
  2. oracle 三列数值相加,Oracle SQL/PLSQL:按货币拆分和求和值的分层查询
  3. asp.net中退出登陆的相关问题(解决后退或直接粘贴地址进入网页的问题)
  4. win10c语言错误,win10打开程序提示错误状态0xc0000020的原因和解决方法
  5. JAVA EE常见英文单词(一)
  6. sketchup生成面域插件_什么插件这么神奇,SketchUp一秒搞定99%异形建模
  7. 利用Python自动生成小学生加减乘除口算考试题卷
  8. 如何成为一个游戏制作人——第5.5章一个小游戏的框架
  9. Drupal view实现排序:未来升序,过去降序
  10. 很好用的搜网盘资源工具。很多都能找到
  11. 神策数据虚席以待,欢迎加入!
  12. android 程序运行,Android如何保持程序一直运行
  13. 使用opencv-python读取多个(海康\华为)网络摄像头的视频流,解决实时读取延迟问题
  14. python3爬取网页AJAX数据
  15. java中的tomcatserverlet
  16. 教师资格证2023年报名时间来了!
  17. 自学MATLAB(四):特征值与特征向量
  18. H5网页如何在微信中自定义分享链接
  19. 小白入门IT不知道改选哪门技术?Java是你的不二之选
  20. 晶闸管|Thyristor(半控型器件)

热门文章

  1. 如何培养创造性思维能力
  2. 银行软件测试论文参考文献,软件测试毕业论文参考文献.doc
  3. HTML页面中条形码或二维码扫描枪的使用
  4. HTML空白字符占位问题
  5. IOU破局之路 | Focal EIOU:打破IOU/GIOU/CIOU的局限
  6. 推荐系统中的bais系统(二)—Select Bais和Exposure Bias
  7. 相关系数与决定系数的关系
  8. Word怎么添加页码
  9. JavaWeb网上图书商城
  10. JS学习之路系列总结四象阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)...