一、引言
写代码的时候往往需要定义许多常量,如int num=5等等,这个数字5显然是(默认的)signed int类型;而unsigned int num=5,此时的数字5显然是unsigned int类型。
现在我们定义一个宏变量#define NUM 5,这个数字5是以什么类型存储的呢?答案是signed int。我们再这样定义一个宏变量#define NUM 5LL,此时的数字5又是以什么类型存储的呢?答案是signed long long。
二、解释
代码里会经常看到在一个数字后面加上U、L、F等符号,这表示什么意思呢?
首先说明下每个符号代表的意义:
1、数据类型
空白:默认为有符号整型,相当于signed int。
U(u):表示该常数用无符号整型方式存储,相当于unsigned int。
L(l):表示该常数用有符号长整型方式存储,相当于signed long。
LL(ll):表示该常数用有符号长长整型方式存储,相当于signed long long。
UL(ul):表示该常数用无符号长整型方式存储,相当于unsigned int。
ULL(ull):表示该常数用无符号长长整型方式存储,相当于unsigned int。
F(f):表示该常数用浮点方式存储,相当于float。
2、进制
空白:默认为10进制。
B(b):2进制(仅汇编里使用,C代码里禁止使用,如1101B)。
H(h):16进制(仅汇编里使用,C代码里禁止使用,如1A2H)。
数字前面加0:8进制。
数字前面加0x:16进制
三、举例
#include "stdio.h" #define NUM1 5 #define NUM2 5U #define NUM3 5L #define NUM4 5LL #define NUM5 5UL #define NUM6 5ULL #define NUM7 5.0F // #define NUM 5F /* 注意这种方式会编译出错,提示在整型常量后不正确使用了F */ int main() { int num1 = 5; /* 默认10进制数5 */ int num2 = 0576; /* 8进制数576 */ int num3 = 0x56B3; /* 16进制数56B3 */ // int num = 1101B; /* 2进制数1101,不是10进制数1101。但这种表示方法是汇编里的,TC会编译不过 */ // int num = 1A5H; /* 16进制数1A5。这种表示方法是汇编里的,TC会编译不过 */ /* 打印各类型所占字节数 */ printf("\n各类型所占字节数:\n"); printf("5: %d\n", sizeof(NUM1)); printf("5U: %d\n", sizeof(NUM2)); printf("5L: %d\n", sizeof(NUM3)); printf("5LL: %d\n", sizeof(NUM4)); printf("5UL: %d\n", sizeof(NUM5)); printf("5ULL:%d\n", sizeof(NUM6)); printf("5F: %d\n", sizeof(NUM7)); /* C语言未提供打印2进制的格式化符 */ /* 以8进制打印出num1、num2、num3 */ printf("\n8进制打印:\n"); printf("0%o\n", num1); printf("0%o\n", num2); printf("0%o\n", num3); /* 以10进制打印出num1、num2、num3 */ printf("\n10进制打印:\n"); printf("%d\n", num1); printf("%d\n", num2); printf("%d\n", num3); /* 以16进制打印出num1、num2、num3 */ printf("\n16进制打印:\n"); printf("0x%x\n", num1); printf("0x%x\n", num2); printf("0x%x\n", num3); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2022-06-06 Clion远程调试
2022-06-06 vs远程调试Linux程序
2014-06-06 TCP_NODELAY详解
2014-06-06 ntohs, ntohl, htons,htonl的比较和详解
2014-06-06 C++ 嵌套类使用(三)
2014-06-06 C++ 嵌套类使用(二)
2014-06-06 C++ 嵌套类使用(一)