[C/C++知识点] 数字后面加U/L/F的含义

本文章向大家介绍[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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章