C语言----数据类型和取值范围及输出格式

本文介绍了C语言中的基本数据类型,包括整型、浮点型、字符型以及布尔型。详细阐述了数据类型的限定符如short、long、long long以及signed和unsigned的用法,并明确了它们的取值范围。还提到了sizeof运算符用于获取数据类型或表达式的长度。此外,文章列出了不同数据类型在输出时对应的printf格式化字符串。最后,针对MATLAB中的位操作和异或运算进行了简要说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言----数据类型和取值范围及输出格式

基本数据类型

在基本类型中的整数类型、浮点数类型和字符类型都已经在之前的文章中使用过了,这里面的_Bool是布尔型,只能取 0 和 1 两个值;

数据类型的限定符

short , long, long long
  我们可以为这些基本数据类型加上一些限定符,比如表示长度的 short 和 long。比如 int 经过限定符修饰之后,可以是 short int,long int,还可以是 long long int。其中 short int表示所占内存比int小的数据类型,而long int表示所占内存比int大的数据类型。

  在 C 语言并没有限制 int 的大小,更没有限制short int等带限定符的数据类型的大小,只是规定了

`short int` <= `int` <= `long int` <= `long long int`


signed 和 unsigned

        还有一对类型限定符是 signed 和 unsigned,它们用于限定 char 类型和任何 int 类型变量的取值范围。signed 表示该变量是带符号位的,而 unsigned 表示该变量是不带符号位的。带符号位的变量可以表示负数,而不带符号位的变量只能表示正数,它的存储空间也就相应扩大一倍。默认所有的整型变量都是 signed 的,也就是带符号位的。

  对于 int 类型的变量来说,有四种表示长度的限定符(除int本身外,还有 short,long 和 long long),在加上符号位的限定signed和 unsigned,所以一共存在着 8 种int 类型的变量。


sizeof 运算符
  sizeof 用于获得数据类型或表达式的长度,它有三种使用方式:

sizeof(type_name); //sizeof(类型),即某一种类型的变量所占内存大小;
sizeof(object); //sizeof(对象),即某一个对象所占内存大小;
sizeof object; //sizeof 对象,查看对象占用内存大小的另一种表达方式;

各类型的输出格式


int  输出为printf("%d", val);

char  输出为printf("%c", cha); 或者 printf("%d", cha)

unsinged short  输出为printf("%u", val);

float  输出为printf("%f", val);

double  输出为printf("%lf", val);

long long 输出为printf("%lld", val);
          输入为scanf("%lld", val);

unsinged long long 输出为printf("%llu", val);
                   输入为scanf("%llu", val);

unsinged long long 输出为printf("0x%016llx", val);//64位十六进制数,完整输出64位十六进制数.
  

在 MATLAB 中:

  • 如果要将某几位置 1,只需与这几位是 1 的数进行或操作即可。
  • 如果要将某几位置 0,只需与这几位是 0 的数进行与操作即可。
  • 在进行取反运算的过程中切不可简单地认为一个数取反后的结果就是该数的相反数,即~
  • 19 的值是-19,这是错误的。
  • 异或运算经常被用到一些比较简单的加密算法中。
/*
 * %d:输出十进制整数
 * %f:输出浮点数
 * %s:输出字符串
 * %c:输出字符
 * %p:输出指针值
 * %u:输出无符号整数
 * %x:输出十六进制整数
 * %o:输出八进制整数
 * %n:输出已写入的字符数
 * %%:输出百分号符号
**/

64位十六进制数.完整输出 64位十六进制数.

在 C 语言中,unsigned long long 通常是 64 位(8 字节)的数据类型,可以存储 0x123456789ABCDEF0 这样的 64 位十六进制数。但由于 printf 的默认格式化选项可能无法完整输出 64 位十六进制数(特别是在某些编译器或平台上),我们需要使用正确的格式说明符来确保完整输出。

方法 1:使用 %llx 或 %llX(小写/大写十六进制)

  • %llx:以小写字母输出十六进制(a-f)。

  • %llX:以大写字母输出十六进制(A-F)。

代码示例
#include <stdio.h>

int main() 
{
    unsigned long long num_64 = 0x123456789ABCDEF0;
    printf("完整输出(小写):0x%llx\n", num_64);
    printf("完整输出(大写):0x%llX\n", num_64);
    return 0;
}

输出结果:

完整输出(小写):0x123456789abcdef0
完整输出(大写):0x123456789ABCDEF0

方法 2:使用 PRIx64 / PRIX64(跨平台兼容)

  • 如果代码需要在不同平台(如 Windows、Linux、嵌入式系统等)运行,建议使用 <inttypes.h> 提供的宏:

    • PRIx64 → %llx(小写)

    • PRIX64 → %llX(大写)

代码示例
#include <stdio.h>
#include <inttypes.h>

int main() 
{
    unsigned long long num_64 = 0x123456789ABCDEF0;
    printf("完整输出(小写):0x%" PRIx64 "\n", num_64);
    printf("完整输出(大写):0x%" PRIX64 "\n", num_64);

    return 0;
}

输出结果:

完整输出(小写):0x123456789abcdef0
完整输出(大写):0x123456789ABCDEF0

方法 3:补齐前导零(固定 16 位十六进制输出)

如果希望输出固定 16 位(64 位十六进制数),可以用 %016llx 或 %016llX 补齐前导零:

printf("补齐前导零:0x%016llX\n", num_64);

输出结果:

补齐前导零:0x123456789ABCDEF0

总结

方法说明示例
%llx / %llX直接输出 64 位十六进制数printf("0x%llX", num_64);
PRIx64 / PRIX64跨平台兼容写法printf("0x%" PRIX64, num_64);
%016llx补齐前导零(16 位)printf("0x%016llX", num_64);

如果你的编译器支持 C99 或更高版本,推荐使用 PRIx64 / PRIX64 以确保跨平台兼容性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值