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 *指针类型通常称为通用指针类型。这种指针可以指向任何类型的数据。 

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

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

相关文章

accelerate 笔记:梯度同步的时间效率

1 介绍 PyTorch 的分布式模块通过在系统中所有GPU之间进行来回通信来操作。 这种通信需要时间&#xff0c;并且确保所有进程了解彼此的状态在使用ddp模块时会在特定的触发点发生 这些触发点被添加到PyTorch模型中&#xff0c;特别是它们的 forward() 和 backward() 方法中当通…

2024-06-05 Android app jni里面c语言函数申请的局部变量数组过大会导致程序崩溃的问题分析

一、下面是一个app jni里面一个函数&#xff0c;函数里面定义一个数组&#xff0c;实际运行的时候发现数组过大的时候会导致app崩溃。 JNIEXPORT jint JNICALL JNI_FUNCTION(native_1getcapture_1data)(JNIEnv *env, jobject obj,jbyteArray des_data,jbyteArray src_data,jin…

Linux 多线程 生产者消费者 问题

在 Linux 系统中&#xff0c;生产者和消费者问题是一个经典的多线程同步问题&#xff0c;用于描述如何在多线程环境中协调多个线程对共享资源的访问。这个问题通常涉及两个类型的线程&#xff1a;生产者线程和消费者线程。生产者线程负责生成数据并将其放入缓冲区&#xff0c;而…

3D开发工具HOOPS助力PLM/PDM系统创新,高效实现复杂数据精细处理、3D模型交互可视化!

在现代制造和工程领域&#xff0c;PLM&#xff08;产品生命周期管理&#xff09;和PDM&#xff08;产品数据管理&#xff09;已成为企业优化流程和提升竞争力的关键工具。 随着技术的飞速发展&#xff0c;PLM和PDM应用程序需要更先进的工具来处理复杂的CAD数据、实现高效的3D可…

九泰智库-注册讲堂 | 浙江省eRPS系统上线后提交文件要求

浙械eRPS系统(https://ylqx.certca.cn/ylqxonline/)已正式上线启用。 在过渡期内&#xff0c;注册申请人需要同时进行线上医疗器械注册电子申报和提交纸质资料&#xff0c;以确保审评审批工作的顺利进行。过渡期结束时间另行通知。 以下是对电子申报资料格式要求的总结&#…

从零开始:如何通过美颜SDK构建自己的直播美颜工具

今天&#xff0c;我将详细介绍如何通过美颜SDK从零开始构建自己的直播美颜工具。 一、了解美颜SDK 什么是美颜SDK 开发者可以通过集成SDK&#xff0c;快速在应用中实现这些功能&#xff0c;而无需从头编写复杂的图像处理算法。 选择合适的美颜SDK 选择时可以根据以下几个方…

南京观海微电子-----555函数信号发生器电路分析

电路图 整个电路的工作过程&#xff1a; 首先&#xff0c;555芯片通过外围电阻电容组成一个多谐振荡器&#xff0c;输出一个方波。 555多谐振荡器输出方波后&#xff0c;经电容C1耦合到由R3&#xff0c;C3组成的积分网络。输出三角波。这也是一个电容充放电的过程&#xff0c…

学生问的一道CSS3媒体查询,实现响应式设计的题

目录 题目要求&#xff1a; 解题思路&#xff1a; 解题&#xff1a; 1&#xff09;大屏、3个DIV水平排列 2&#xff09;中屏、前2个DIV水平占一半&#xff0c;第三个另起一行&#xff0c;宽度占满 3&#xff09;小屏&#xff0c;3个DIV铺满&#xff0c;垂直排列 题目要求&…

2024年端午节放假通知

致尊敬的客户以及全体同仁&#xff1a; 2024年端午节将至&#xff0c;根据国务院办公厅通知精神&#xff0c;结合公司的实际情况&#xff0c;现将放假事宜通知如下&#xff1a; 2024年6月8日&#xff08;星期六&#xff09;至6月10日&#xff08;星期一&#xff09;&#xff…

科普丨什么是数字孪生灌区(平台)?如何建设?有何好处?

在农业发展的新时代&#xff0c;数字孪生灌区的概念逐渐走进大众视野&#xff0c;成为推动农业现代化、提升粮食安全保障能力的关键力量。那么&#xff0c;究竟什么是数字孪生灌区&#xff1f;它又是如何建设的&#xff1f;又能为我们带来哪些好处呢&#xff1f; 数字孪生灌区…

Java基础教程 - 10 异常

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 10 异常 10.1 异常的概念 什么是异常&#xff1f; 异常&#xff08;Exceptions&#xff09;是指在程序执行过程中出现的错误或异常情况&#xff0c;导致程序无法继续正常执行的事件。 但是…

R_AARCH64_ADR_PREL_PG_HI21问题说明

目录 问题现象&#xff1a; 问题原因 问题机理 问题现象&#xff1a; 客户现场加载out文件出现如下问题&#xff1a; 打印“Relocation of type ‘R_AARCH64_ADR_PREL_PG_HI22…..’”,明确是ARDP指令引起的问题 问题原因 ARDP的寻址范围是4GB范围&#xff0c;加载的位置…

Linux C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址&#xff08;类似门牌号&#xff09; • 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 …

密码学基本概念(补充)

BiBa模型的*特性规则&#xff1a;主体不能修改更高完整级的客体&#xff08;主题不能向上写&#xff09; Diffie-Hellman密钥交换协议的安全性基于求解离散对数的困难性&#xff0c;既对于C^d M mod P&#xff0c;在已知C和P的前提下&#xff0c;由d求M很容易&#xff0c;但是…

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

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

EditPlus 输入错误: 没有文件扩展“.js”的脚本引擎

原因 JS扩展名的文件被其他软件关联了&#xff0c;需要取消关联 解决办法 cmd窗口&#xff0c;输入 regedit 进入注册表&#xff0c; 打开注册表编辑器&#xff0c;定位[HKEY_CLASSES_ROOT\.js]这一项&#xff0c;双击默认值将其改为“JSFile”即可

Codeforces Round 948 (Div. 2) A~D

A. Little Nikita &#xff08;思维&#xff09; 题意&#xff1a; 小 A A A决定用一些立方体建一座塔。一开始&#xff0c;塔上没有任何立方体。在一次移动中&#xff0c;小 A A A要么正好把 1 1 1 个立方体放到塔顶&#xff0c;要么正好从塔顶移走 1 1 1 个立方体。存不存…

信息可溯、安全可控 | SW-LIMS 采测分离监测模式解析

数据的准确性在环境监测过程中至关重要,为了确保环监数据的真实有效,并满足“全程留痕、全程监控、信息可溯、安全可控”的要求,采测分离监测模式是一个有效的解决方案。 这种模式通过将样品采集和样品检测交由不同的单位完成,形成了相互独立、相互监督的工作机制,有助于减少潜…

LeetCode刷题之HOT100之跳跃游戏

2024/6/5 今天下起了绵密细雨&#xff0c;空气清新很多。昨晚做的梦较魔幻&#xff0c;可能也是导致我睡觉时业已破损的小米手环8的表腕断裂的因素之一。来到实验室&#xff0c;打扫一下卫生&#xff0c;听听歌&#xff0c;做道题。好不自在呀&#xff01; 1、题目描述 2、逻辑…

mysql中optimizer trace的作用

大家好。对于MySQL 5.6以及之前的版本来说&#xff0c;查询优化器就像是一个黑盒子一样&#xff0c;我们只能通过EXPLAIN语句查看到最后 优化器决定使用的执行计划&#xff0c;却无法知道它为什么做这个决策。于是在MySQL5.6以及之后的版本中&#xff0c;MySQL新增了一个optimi…