c语言为什么要分多种整型数据(C语言基础-数据类型-05整型和sizeof关键字)

整型

short、int、long、long long

数据类型 占用空间

short(短整型) 2字节

int(整型) 4字节

long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位)

long long(长长整形) 8字节

注意

需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。

当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

整型常量 所需类型

10 代表int类型

10l,10L 代表long类型

10ll, 10LL 代表long long类型

10u, 10U 代表unsigned int类型

10ul, 10UL 代表unsigned long类型

10ull, 10ULL 代表unsigned long long类型

打印格式 含义

%hd 输出short类型

%d 输出int类型

%l 输出long类型

%ll 输出long long类型

%hu 输出unsigned short类型

%u 输出unsigned int类型

%lu 输出unsigned long类型

%llu 输出unsigned long long类型

#include <stdio.h> int main() { short a = 10; int b = 10; long c = 10l; //或者10L long long d = 10ll; //或者10LL printf("sizeof(a) = %u\n", sizeof(a)); printf("sizeof(b) = %u\n", sizeof(b)); printf("sizeof(c) = %u\n", sizeof(c)); printf("sizeof(c) = %u\n", sizeof(d)); printf("short a = %hd\n", a); printf("int b = %d\n", b); printf("long c = %ld\n", c); printf("long long d = %lld\n", d); unsigned short a2 = 20u; unsigned int b2 = 20u; unsigned long c2= 20ul; unsigned long long d2 = 20ull; printf("unsigned short a = %hu\n", a2); printf("unsigned int b = %u\n", b2); printf("unsigned long c = %lu\n", c2); printf("unsigned long long d = %llu\n", d2); return 0; }

整型int(比较常用)

int整型变量的定义和输出:

打印格式 含义

%d 输出一个有符号的10进制int类型

%o(字母o) 输出8进制的int类型

%x 输出16进制的int类型,字母以小写输出

%X 输出16进制的int类型,字母以大写写输出

%u 输出一个10进制的无符号数

#include <stdio.h> int main() { int a = 123; //定义变量a,以10进制方式赋值为123 int b = 0567; //定义变量b,以8进制方式赋值为0567 int c = 0xabc; //定义变量c,以16进制方式赋值为0xabc printf("a = %d\n", a); printf("8进制:b = %o\n", b); printf("10进制:b = %d\n", b); printf("16进制:c = %x\n", c); printf("16进制:c = %X\n", c); printf("10进制:c = %d\n", c); unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值 printf("有符号方式打印:d = %d\n", d); printf("无符号方式打印:d = %u\n", d); return 0; }

有符号数和无符号数区别

有符号数

有符号数是最高位为符号位,0代表正数,1代表负数。

c语言为什么要分多种整型数据(C语言基础-数据类型-05整型和sizeof关键字)(1)

#include <stdio.h> int main() { signed int a = -1089474374; //定义有符号整型变量a printf("%X\n", a); //结果为 BF0FF0BA //B F 0 F F 0 B A //1011 1111 0000 1111 1111 0000 1011 1010 return 0; }

无符号数

无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

c语言为什么要分多种整型数据(C语言基础-数据类型-05整型和sizeof关键字)(2)

#include <stdio.h> int main() { unsigned int a = 3236958022; //定义无符号整型变量a printf("%X\n", a); //结果为 C0F00F46 return 0; }

当我们写程序要处理一个不可能出现负值的时候,一般用无符号数,这样可以增大数的表达最大值。

有符号和无符号整型取值范围

数据类型 占用空间 取值范围

short 2字节 -32768 到 32767 (-215 ~ 215-1)

int 4字节 -2147483648 到 2147483647 (-231 ~ 231-1)

long 4字节 -2147483648 到 2147483647 (-231 ~ 231-1)

unsigned short 2字节 0 到 65535 (0 ~ 216-1)

unsigned int 4字节 0 到 4294967295 (0 ~ 232-1)

unsigned long 4字节 0 到 4294967295 (0 ~ 232-1)

sizeof关键字

sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节

sizeof的返回值为size_t,size_t类型在32位操作系统下是unsigned int,是一个无符号的整数

sizeof返回的占用空间大小是为这个变量开辟的大小,而不只是它用到的空间。和现今住房的建筑面积和实用面积的概念差不多。

#include <stdio.h> int main() { int a; int b = sizeof(a);//sizeof得到指定值占用内存的大小,单位:字节 printf("b = %d\n", b); size_t c = sizeof(a); printf("c = %u\n", c);//用无符号数的方式输出c的值 return 0; }


谢谢阅读!如有错译,欢迎各位朋友评论区纠正。

喜欢C\C 的朋友可以点个关注,搜索文章不迷路!(内容持续更新中)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页