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/22719.shtml

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

相关文章

密码学基本概念(补充)

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…

我国液碱产量逐渐增长 行业集中度有望不断提升

我国液碱产量逐渐增长 行业集中度有望不断提升 液碱是由氢氧化钠&#xff08;NaOH&#xff09;、氢氧化钾&#xff08;KOH&#xff09;等化合物以及水组成的一种碱性化合物。液碱的相对分子质量为40.00&#xff0c;密度为1.318g/cm&#xff0c;在常温常压下多表现为一种无色、无…

12 - 常用类

那就别跟他们比&#xff0c;先跟自己比&#xff0c;争取今天比昨天强一些&#xff0c;明天比今天强一些。 1.包装类 针对八种基本数据类型封装的相应的引用类型。 有了类的特点&#xff0c;就可以调用类中的方法。&#xff08;为什么要封装&#xff09; 基本数据类型包装类b…

JavaSE——学习总结

一、初识Java 运行Java程序 Java是一门半编译型、半解释型语言 先通过javac编译程序把源文件进行编译&#xff0c;编译后生成的.class文件是由字节码组成的&#xff0c;和平台无关、面向JVM的文件&#xff0c;最后启动java虚拟机来运行.class文件&#xff0c;此时JVM会将字节…

目标检测数据集 - 城市道路行驶车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

​​​数据集介绍&#xff1a;城市道路行驶车辆检测数据集&#xff0c;真实监控场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道路快速行驶车辆、城市道路慢速行驶车辆、城市道路密集行驶车辆、城市道路夜间低光行驶车辆数据等。数据集标注标签划分为 "…

python-字符替换

[题目描述] 给出一个字符串 s 和 q 次操作&#xff0c;每次操作将 s 中的某一个字符a全部替换成字符b&#xff0c;输出 q 次操作后的字符串输入 输入共 q2 行 第一行一个字符串 s 第二行一个正整数 q&#xff0c;表示操作次数 之后 q 行每行“a b”表示把 s 中所有的a替换成b输…

使用kubespray部署k8s生产环境

使用kubespray部署k8s生产环境 系统环境 OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: L…

mac M1下安装PySide2

在M1下装不了PySide2, 是因为PySide2没有arm架构的包 1 先在M1上装qt5 安装qt主要是为了能用里面的Desinger, uic, rcc brew install qt5 我装完的路径在/opt/homebrew/opt/qt5 其中Designer就是用来设计界面的 rcc用resource compiler, 编绎rc资源文件的, 生成对应的py文件…

echarts legend. icon的展示

默认展示 icon展示circle圆形rect矩形roundRect圆角矩形triangle三角形diamond菱形pin水滴arrow箭头none不显示

Redis位图

简介 在我们平时开发过程中&#xff0c;会有一些bool型数据需要存取&#xff0c;比如用户一年的签到记录&#xff0c;签了是1&#xff0c;没签是0&#xff0c;要记录365天。如果使用普通的key/value&#xff0c;每个用户要记录365个&#xff0c;当用户上亿的时候&#xff0c;需…

数据中心综合解决方案

安科瑞电气股份有限公司 祁洁 acrelqj 一、方案介绍 安科瑞电气紧跟数据中心发展形式&#xff0c;推出数据中心综合解决方案&#xff0c;集成了变配电监测、电源备自投、电气接点测温、智能照明控制、电能质量监测及治理、蓄电池在线监测、精密配电监控、智能母线监控以及消…

重要经济数据对行情的影响有多大?

金融市场上的消息非常多&#xff0c;可以来自不同国家、不同大型企业&#xff0c;也可以由不同机构统计公布&#xff0c;甚至是各国政府或中央银行的发表。在宏观经济层面上&#xff0c;所有政经消息都属于金融市场的风险事件&#xff0c;大多能引起市场波动&#xff0c;因此投…

android 开机动画执行流程

android深入了解开机动画 开机动画的种类 1&#xff1a;View绘制 2&#xff1a;逐帧动画&#xff1a;比较主流的方式&#xff0c;一般动画的文件打包成 bootanimation.zip 存储到 /system/media/ 下。一般.zip文件 > 5M 就会有明显的卡顿&#xff0c;所以一般开机动画只有…

正大国际期货:期货交易需要根除的几点习惯

1、交易过多品种。对于期货交易而言&#xff0c;最不靠谱的就是同时操作多个品种。我认为的较合适的品种上限在3-4个&#xff0c;甚至更少为好。我们经常看到的截图&#xff0c;动辄十个甚至数十个品种&#xff0c;而且都盈利&#xff0c;这种截图看看就罢&#xff0c;不必认真…