DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
本文章向大家介绍[C/C++知识点] 数字后面加U/L/F的含义,主要包括[C/C++知识点] 数字后面加U/L/F的含义使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、引言
       写代码的时候往往需要定义许多常量,如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;
}
复制代码
posted on   DoubleLi  阅读(1912)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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++ 嵌套类使用(一)
点击右上角即可分享
微信分享提示