当前位置:首页 > 技术 > 正文内容

C语言基础:常量、二进制与数据类型详解

访客 技术 2026年5月30日 1

常量的定义与使用

程序运行期间值不可更改的量称为常量。通常建议常量名采用大写形式,以区别于变量。

常量类型

  • 字面量常量:直接书写在代码中的数值或字符,如整数 10、浮点数 3.14、字符 'A'
  • 标识符常量:通过命名方式定义的常量,可通过两种机制实现。

标识符常量的声明方式

1. 宏定义(#define) —— 属于预处理器指令,需置于函数外部。

#define MAX_SIZE 100

2. const 关键字(C99标准引入) —— 编译时进行类型检查,作用域更灵活。

const int MAX_VALUE = 200;

两种方式对比

特性const#define
类型检查
处理阶段编译期预处理阶段
内存分配在内存中创建文本替换

进制系统与转换

常见进制表示

  • 十进制(DEC):默认表示方式,如 123
  • 二进制(BIN):以 0b 开头,如 0b1010
  • 十六进制(HEX):以 0x 开头,如 0xFF

输出格式控制符

占位符含义
%d十进制整数
%x小写十六进制
%#x带前缀 0x 的十六进制
%#X带前缀 0X 的十六进制

进制转换规则

  • 其他进制转十进制:从最低位开始,每位乘以基数的幂次,求和。
  • 十进制转其他进制:不断除以目标基数,取余数并倒序排列。

快速转换法:八四二一法则

用于二进制与十六进制之间的快速互换,每4位二进制对应1位十六进制。

1111 → 15 → F
1010 → 10 → A

数值的内部编码:原码、反码、补码

计算机中负数以补码形式存储。

  • 正数与零:原码 = 反码 = 补码。
  • 负数
    • 原码:符号位为1,其余位为绝对值的二进制。
    • 反码:符号位不变,其余位取反。
    • 补码:反码加1。

数据类型详解

整数类型

类型长度(字节)说明
short int2可省略 signed
int4默认为有符号
long int4/8视平台而定
long long int8固定8字节

后缀与占位符

字面量后缀用于指定类型:

100U     // unsigned int
100L     // long
100LL    // long long

格式化输出占位符:

类型占位符
int%d
unsigned int%u
short%hd
long long%lld

等宽整数类型(stdint.h)

提升跨平台兼容性:

int8_t    n1 = 100;   // 8位有符号整数
uint8_t   n2 = 255;   // 8位无符号整数
int32_t   n3 = -1000; // 32位有符号整数
uint64_t  n4 = 1ULL;  // 64位无符号整数

浮点类型

类型长度有效位数
float46~9
double815~18
long double10~1618+

浮点数输出默认保留6位小数,可通过格式控制修改:

printf("value: %.2f\n", x); // 显示两位小数

科学计数法与格式符

double val = 5.2e2; // 等价于 5.2 × 10²

// 输出格式
%f     // 十进制形式
%e     // 科学计数法(如 3.211000e-4)

字符类型(char)

本质是单字节整数,支持有符号与无符号版本。

  • 字面量用单引号:'a''\n'
  • 转义序列示例:
    • \n:换行
    • \':单引号
    • \\:反斜杠
    • \t:制表符
  • ASCII码范围:0~127(7位二进制),共128个字符。
  • 存储过程:字符 → ASCII码值 → 二进制存储。

ASCII与字符映射

A → 65, a → 97, '0' → 48

布尔类型(bool)

在 C99 中引入,支持真/假逻辑。

  • C89:使用宏定义 #define TRUE 1
  • C99
    • 添加 _Bool 类型。
    • 通过 <stdbool.h> 使用 booltruefalse

逻辑值规则:0 为假,非零即为真。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。