Linux C语言: 数据类型

一、 为什么要引入数据类型

• 计算机中每个字节都有一个地址(类似门牌号)
• CPU通过 地址 来访问这个字节的空间
        0x20001103 1 0 0 1 0 0 1 1
        0x20001102 1 1 1 0 1 1 1 0
        0x20001101 1 1 1 1 0 1 0 1
        0x20001100 0 1 1 0 0 0 0 1(红色背景为地址)

施加int类型后,代表数值-290800982 

施加int类型后,代表数值-290800982

•  对于计算机系统,二进制0和1数据没有任何意义
• 为了更接近现实生活,人为的规定了数据类型,便于有效组织管理这些数据

二、整型-数据类型的定义 

 1、整型的取值范围

• /usr/include/limits.h文件中,有数据类型范围的定义

# define SCHAR_MIN (-128)
# define SCHAR_MAX 127
# define UCHAR_MAX 255
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN(-LONG_MAX - 1L) 

char:-128 ~ 127
short:-32768 ~ 32767
int:-2147483648 ~ 2147483647
long:-9223372036854775808 ~ 9223372036854775807

2、C语言中,如何获取某个数据类型所占用空间数? 

sizeof 运算符
 • sizeof是C语言中保留关键字,也是单目运算符。能获取某个数据类型所占用空间
的字节数。
• 使用形式:sizeof(变量名称) 或者 sizeof 变量名称 或者sizeof(数据类型)

int a;
sizeof(a) //√建议
sizeof a //√
sizeof(int)//√建议
sizeof int //× 

三、变量的作用与用法

1、变量的作用 

• 计算机中每一个字节的存储空间都有对应的地址,可以通过地址对其访问,进行读写操作。
0x20000000
• 若需要内存中存储一个整数58,怎么实现呢? 

• C语言设计了变量的概念,变量用来在程序中保存数据比如: int val = 58; //声明一个int型变量val,CPU为val分配4个字节,可以存储数值58
• C语言提供了直接操作地址的功能,通过指针来访问某个地址空间,读写数据,后面再讲。

2、变量的用法 

(1)变量的定义格式

        关键字类型 变量名; int a;
        关键字类型 变量名1,变量名2, ...; int a, b;

(2)如何进行变量赋值

变量初始化赋值,要使用赋值运算符=,可以初始化时赋值,也可以初始化后单独赋值:
         类型关键字 变量名 = 数值; int a = 20;
         类型关键字 变量名1 = 数值,变量名2 = 数值, ...; int a=10, b = 20
              = 表示将”= ”右边的值赋给左边的变量 

3、变量名要求

(1) 变量名以字母、数字、下划线组成;
(2) 变量名不能以数字、下划线开头;
(3) 变量名不能是关键字;
(4) 变量名不能包括空格、标点符合、和类型说明符。

4、变量的注意事项

nt num_1 = 5; //正确
int sum = 0; //正确
int 1_num = 5; //错误 不能数字开头
int %age = 18; //错误 不能有类型说明符(%、&、!、#、
@、¥)
int while = 23; //错误,while是C语言关键字
int name age = 10;//错误,不能有空格

变量必须先定义再使用
a = 100; //错误
int a;
变量在参与运算前,需要对其初始化:
int a;
int b;
b = a; //不会出现编译错误,但是存在运行风险,因为a的数值不确定。

 5、变量扩展

 下面三点,后续课程会深入讲解
        ① 变量的存储类型
                auto
                extern
                register
                static
        ② 局部变量和全局变量
        ③ 变量的作用范围

四、字符型变量 

1、定义格式 

char c1 = ‘A’;
char c2 = ‘a’;
char c3 = 66;

2、 注意字符常量要用单引号括起来,也可以用字符对应的ASCII码值进行赋值;
printf对应的格式符是%c;

五、浮点型-数据类型

1、浮点型 

浮点型:用于存储小数,即数学中的实数

 2、浮点数的表示形式

 

#include <stdio.h>
int main()
{
float f1 = 0.008;
float f2 = 8E-3;
float f3 = 8000;
float f4 = 8E+3;
printf("f1=%f,f2=%f\n", f1, f2);
printf("f3=%f,f4=%f\n", f3, f4);
return 0;
}

f1=0.008000
f2=0.008000
f3=8000.000000
f4=8000.000000

 不论是浮点数形式,还是指数形式,输出效果是相同的

#include <stdio.h>
int main( )
{
float a = 1.12345678901234567890;
double b =
1.12345678901234567890;
long double c =
1.12345678901234567890;
printf("a = [%.30f]\n", a);
printf("b = [%.30lf]\n", b);
printf("c = [%.30Lf]\n", c);
return 0;
}

a = [1.123456835746765136718750000000]
b = [1.123456789012345691247674039914]
c = [1.123456789012345691247674039914]

 绝大多数的浮点数是不能精确的表示的        

3、计算机浮点数格式标准

 IEEE-754标准规定:

单精度浮点数的最高位为符号位,S为0,正数,S为1,负数;
• 后面跟8位经偏移的阶码 (移码),偏移量为 127(科学计数法中,E可能为负数,所以规定,E的真实值需要再加上一个中间数,对于8位的E来说,中间数就是127
• 尾数用原码表示,且把尾数规格化为1.xxx,...x(x为0或1),并将1去掉,尾数用23位表示。

双精度浮点数的最高位为符号位
• 后面跟11位经偏移的阶码 (移码),偏移量为 1023,
• 尾数用原码表示,且把尾数规格化为1.xxx,...x(x为0或1),并将1去掉,尾数用52位表示。

举例:浮点数float 9.625 在内存中的存储 

#include <stdio.h>
int main()
{
float f = 9.625;
printf("%#x\n", *(int *)&f);
return 0;
}

0x411a0000

快捷计算浮点型: 

Base Convert: IEEE 754 Floating Point

IEEE-754 Floating Point Converter

4、浮点数怎么作比较

(1)浮点数存储的时候,存在精度损失,大多浮点数不是一个精确表示的数。
(2)在浮点数比较的时候,可不可以使用==进行比较? 

测试程序1: 

#include <stdio.h>
int main() {
double a = 1.0;
double b = 0.9;
if ((a - b) == 0.1) {
printf("equal\n");
}
else {
printf("not equal\n");
}
return 0;
}

not equal

 测试程序2:

为了更好地进行代码分析,将 a - b 的值、 0.1 的值都打印

include <stdio.h>
int main() {
    double a = 1.0;
    double b = 0.9;
    printf("%.30lf\n", a-b);
    printf("%.30lf\n", 0.1);
    return 0;
}

0.099999999999999977795539507497
0.100000000000000005551115123126

(3)浮点数跟零值进行比较

#include <stdio.h>
#include <math.h>
int main() {
double a = 1.0;
double b = 0.9;
double t = fabs((a - b) - 0.1);
if (t < 0.00000000000001 ){
printf("equal\n");
}
else {
printf("not equal\n");
}
return 0;
}

 自定义精度:待比较的两个浮点数做减法,差值的绝对值小于精度,认为相等 ,反之不等

六、bool类型 

1、_Bool类型-基础类型 

1)从 C99 标准开始,增加了关键字 _Bool 用来表示布尔类型。

  • 只能取值为 1 或 0
  • 非零值为真,代表条件成立
  • 零为假,代表条件不成立
  • 占用的空间是1个字节,使用二进制的第0位来表示0和1
#include <stdio.h>
int main()
{
_Bool a;
a = -1;
if (a) {
printf("true %d\n", a);
}
else {
printf("false:%d\n", a);
}
printf("sizeof(_Bool)=%lu\n", sizeof(_Bool));
return 0;
}

true 1
sizeof(_Bool)=1

2、bool类型

• C99 中增加了一个头文件 stdbool.h。并在其中定义了bool、true 和 false

/usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h
#define bool _Bool
#define true 1
#define false 0 

#include <stdio.h>
#include <stdbool.h>
int main()
{
bool a;
a = 10;
if (a) {
printf("true:%d\n", a);
}
else {
printf("false:%d\n", a);
}
return 0;
}


true:1
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool f = false;
printf("f = %d\n", f);
f--;
printf("f = %d\n", f);
f--;
printf("f = %d\n", f);
f--;
printf("f = %d\n", f);
return 0;
}

七、void类型 

  • 该类型也叫缺省型,代表没有类型。
  • 它通常被用作一种占位符,或用来表示“无返回值”的函数,或指向任一类型的指针等 
void类型的用法:
(1)定义不返回任何值的函数
void printHelloWorld()
{
    printf("Hello, World!");
}
(2)通用指针类型

         void *指针类型通常称为通用指针类型。这种指针可以指向任何类型的数据。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握ChatGPT的正确打开方式

引言 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了显著的突破。其中&#xff0c;聊天生成预训练变换器&#xff08;ChatGPT&#xff09;作为一种新型的对话式AI模型&#xff0c;引起了广泛关注。本文将详细介绍ChatGPT的正确使用…

linux业务代码性能优化点

planning优化的一些改动----------> 减少值传递&#xff0c;多用引用来传递 <---------- // ----------> 减少值传递&#xff0c;多用引用来传递 <---------- // 例1&#xff1a; class A{}; std::vector<A> v; // for(auto elem : v) {} // 不建议&#xff…

视频监控汇聚平台LntonCVS国标GB28181协议实现语音对讲功能

在当今这个智能技术飞速发展的时代&#xff0c;人工智能已经成为了电子产品领域的一股不可忽视的热门趋势。随着科技的不断进步&#xff0c;越来越多的电子产品开始融入人工智能技术&#xff0c;从而为其开拓了全新的发展路径。在这个大背景下&#xff0c;安防摄像头无插件直播…

Mitmproxy作为瑞士军刀可拦截、检查、修改和重放网络流量可用于渗透测试。

Mitmproxy是一个开源的中间人代理工具&#xff0c;用于拦截、修改和查看HTTP和HTTPS流量。它可以用于调试、测试和分析网络应用程序和移动应用程序的通信。 Mitmproxy可以在本地计算机上作为一个代理服务器运行&#xff0c;将所有流量导向到它&#xff0c;然后可以查看和修改这…

CA到TA的调用流程是什么?如何实现的?

快速链接: . &#x1f449;&#x1f449;&#x1f449;Trustzone/TEE/安全 面试100问-目录 &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 个人博客笔记导读目录(全部) 简单一点来说&#xff0c;CA…

电器公司2套PROE如何满足20人使用?

电器公司的日常运营高度依赖于各类软件工具&#xff0c;其中PROE作为广泛应用于产品设计领域的软件&#xff0c;在电器厂公司的生产流程中扮演着举足轻重的角色。如何合理配置和管理PROE软件资源&#xff0c;以满足20人同时使用的需求&#xff0c;是许多电器厂公司面临的实际问…

比瓴科技以何魅力吸引安全大牛?

今年4月&#xff0c;专注于软件供应链安全的行业领导厂商比瓴科技宣布&#xff0c;与元豚科技战略合并&#xff0c;元豚科技创始人唐誉聪加入比瓴&#xff0c;担任合伙人及研发副总裁一职。唐誉聪表示&#xff0c;将携手比瓴共同推动持续应用安全平台(ASPM)的发展&#xff0c;将…

深度学习论文: DINOv2: Learning Robust Visual Features without Supervision

深度学习论文: DINOv2: Learning Robust Visual Features without Supervision DINOv2: Learning Robust Visual Features without Supervision PDF: https://arxiv.org/abs/2304.07193 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://githu…

【产品面对面】deepin 办公升级:打印管理器全功能解析及驱动资源汇总

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 如果你想要或者正在使用 deepin 进行办公&#xff0c;那么一定会使用到 “打印管理器”。打印管理器作为一款管理打印机的工具&#xff0c;将成为你办公得力助手之一。近期&#xff0c;我们会在 deepin 应用商店发…

【学习心得】算法刷题心得分享

一、为什么要刷题&#xff1f; 提升编程能力&#xff0c;强化对数据结构的理解&#xff0c;熟练掌握常用的算法等为竞赛、考试做准备找实习、找工作需要&#xff08;上机考试面试手撕代码&#xff09;提升自信心&#xff0c;放松一下 二、刷题前应该有哪些知识储备&#xff1f;…

Web 网页性能优化

Web 网页性能及性能优化 一、Web 性能 Web 性能是 Web 开发的一个重要方面&#xff0c;侧重于网页加载速度以及对用户输入的响应速度 通过优化网站来改善性能&#xff0c;可以在为用户提供更好的体验 网页性能既广泛又非常深入 1. 为什么性能这么重要&#xff1f; 1. 性能…

Spring Boot前后端简单集成MinIo开发

Spring Boot前后端简单集成MinIo开发 源码地址重要配置和代码MinIO配置核心代码 最终效果 源码地址 minioStudy 重要配置和代码 MinIO配置 pom文件引入依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</ar…

驱鸟设备之机场专用电子炮驱鸟器

近年来&#xff0c;随着全球环保意识的显著增强&#xff0c;鸟类种群数量呈现稳步上升的趋势。然而&#xff0c;这一积极的生态变化也带来了一系列挑战&#xff0c;其中之一就是鸟击事件的概率显著增加。在这种情况下&#xff0c;采取有效的鸟害防治措施显得尤为重要。 合理利用…

【Centos7】CentOS 7下的PyTorch安装策略:高效实践指南

【Centos7】CentOS 7下的PyTorch安装策略&#xff1a;高效实践指南 大家好 我是寸铁&#x1f44a; 总结了一篇【Centos7】CentOS 7下的PyTorch安装策略&#xff1a;高效实践指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 由于需要跑深度学习&#xff0c;要用到pytorch&a…

伦敦金交易规则赶快学起来!

今年美联储开启降息的时间窗口也许就在下半年&#xff0c;黄金价格有望再次迎来趋势性的上涨&#xff0c;投资者进入黄金市场可谓恰逢其时。目前市场上主流的黄金投资方式是电子盘交易&#xff0c;当中又以国际市场上的伦敦金&#xff0c;在全球范围最为普及。 炒卖伦敦金&…

计算机网络学习记录 运输层 Day5

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我…

Transformer系列:图文详解KV-Cache,解码器推理加速优化

前言 KV-Cache是一种加速Transformer推理的策略&#xff0c;几乎所有自回归模型都内置了KV-Cache&#xff0c;理解KV-Cache有助于更深刻地认识Transformer中注意力机制的工作方式。 自回归推理过程知识准备 自回归模型采用shift-right的训练方式&#xff0c;用前文预测下一个…

uniapp内置的button组件的问题

问题描述 由于想要使用uniapp内置button组件的开放能力&#xff0c;所以就直接使用了button&#xff0c;但是他本身带着边框&#xff0c;而且使用 border&#xff1a;none&#xff1b;是没有效果的。 问题图片 解决方案 button::after {border: none;} 正确样式 此时的分享…

大话C语言:第22篇 字符数组

1 字符数组概述 C语言中没有字符串这种数据类型&#xff0c;可以通过char的数组来替代。数字0(和字符 \0 等价)结尾的char数组就是一个字符串&#xff0c;字符串是一种特殊的char的数组。 #include <stdio.h>int main() {char c1[] {c, , p, r, o, g}; // 普通字符数…

算法学习笔记——时间复杂度和空间复杂度

时间复杂度和空间复杂度 常数操作&#xff1a; 固定时间的操作&#xff0c;执行时间和数据量无关 位运算 > 算数运算 > 寻址 > 哈希运算&#xff0c;都是常数操作&#xff0c;哈希运算操作时间最慢 链表的get(i)方法不是常数操作&#xff0c;因为链表不是连续的存储…