C语言——数据类型、基本数据类型的取值范围

目录

一、数据类型

1.基本类型

2.sizeof运算符

3.signed和unsigned 

二、取值范围

1.比特位

2.字节

3.符号位

4.补码

 5.基本数据类型的取值范围


一、数据类型

 

1.基本类型

(1)整数类型

  • short int
  • int
  • long int
  • long long int

(2)浮点数类型

  • float
  • double
  • long double

(3)字符类型

  • char

(4)布尔类型

  • _Bool

(5)枚举类型

  • enum

2.sizeof运算符

sizeof 运算符用于获得数据类型或表达式的长度

如:-sizeof(object);              //sizeof(对象)

       -sizeof(type_name);      //sizeof(类型)

       -sizeof object;               //sizeof 对象

代码举例:

#include <stdio.h>

int main()
{
	int i;
	char j;
	float k;
	
	i = 123;
	j = 'C';
	k = 3.14;
	
	printf("size of int is %dn",sizeof(int));
	printf("size of i is %dn",sizeof(i));
	printf("size of char is %dn",sizeof(char));
	printf("size of j is %dn",sizeof j);
	printf("size of float is %dn",sizeof(float));
	printf("size of k is %dn",sizeof k);
	
	return 0;
} 

代码运行结果:

 分别打印各类型所占字节:

#include <stdio.h>

int main()
{
	printf("int = %dn",sizeof(int));
	printf("short int = %dn",sizeof(short));
	printf("long int = %dn",sizeof(long));
	printf("long long int = %dn",sizeof(long long));
	printf("char = %dn",sizeof(char));
	printf("_Bool = %dn",sizeof(_Bool));
	printf("float = %dn",sizeof(float));
	printf("double = %dn",sizeof(double));
	printf("long double = %dn",sizeof(long double));
	
	return 0;
	
}

运行结果(设备不同,结果可能也不同):

3.signed和unsigned 

        signed:代表有符号的,第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127。(默认为signed)

        unsigned:代表无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255。

  • [signed] short [int]
  • unsigned short [int]
  • [signed] int
  • unsigned int
  • [signed] long [int]
  • unsigned long [int]
  • [signed] long long [int]
  • unsigned long long [int]

代码举例:

#include <stdio.h>

int main()
{
	short i;
	unsigned short j;
	
	i = -1;
	j = -1;
	
	printf("%dn",i);//d为打印带符号的 
	printf("%un",j);//u为打印不带符号的 
	
	return 0;
}

运行结果:

 可见,打印 j 时,结果并不是我们期望出现的-1,而是65535,这与数据类型的取值范围有关。

二、基本数据类型的取值范围

1.比特位

CPU能读懂的最小单位是:比特位,bit,b。每个比特位只能存放二进制数,即0和1.

2.字节

内存机构最小寻址单位:字节,Byte,B

注:1Byte = 8 bit

一个字节能存放的最大的数(2^{31}-1)用二进制表示为:

1 1 1 1 1 1 1 1

该数转化为十进制为:2147483647

补充:进制

 打印2^{32}-1,代码如下:

# include <stdio.h>
#include <math.h>

int main()
{
	unsigned int result = pow(2,32) - 1;
	printf("result = %un",result);
	
	return 0;
}

运行结果:

 注意:若不加“unsigned”,则输出结果为2147483647.这是因为默认情况下int是signed类型的,也就是说左边第一位是符号位,所以必须加“unsigned”来使其变为一个无符号的整型变量,使得32位都用来存放数值。

3.符号位

  • 存放signed类型的存储单元中,左边第一位表示符号位。如果该位为0,表示该整数是一个正数;如果该位为1,表示该整数是一个负数。
  • 一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31个比特位。

4.补码

  • 正数的补码是该数的二进制形式。
  • 负数的补码需要通过以下几步获得:

(1)先取得该数的绝对值的二进制形式

(2)再将第1步的值按位取反(除符号位)

(3)最后将第2步的值加1

例如:

 5.基本数据类型的取值范围

数据类型 字节数 取值范围
char 1 -128~127
unsigned char2 1 0~255
short 2 -32768~32767
unsigned short 2 0~65535
int 4 -2147483648~2147483647
unsigned int 4 0~4294967295
long 4 -2147483648~2147483647
unsigned long 4 0~4294967295
long long 8 -9223372036854775808~9223372036854775807
unsigned long long 8 0~18446744073709551615
数据类型 字节数 取值范围(绝对值)
float 4 1.17549*10^-38~3.40282*10^38
double 8 2.22507*10^-308~1.79769*10^308
long double 12 2.22507*10^-308~1.79769*10^308

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>