当前位置:首页 » 编程语言 » c语言整型字节取值范围理解
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言整型字节取值范围理解

发布时间: 2022-05-08 01:44:05

A. c语言中,基本整形,取值范围-32768到32767什么意思

就是说如果你定义一个整型变量,数值为32768,那么就会出现运行错误,因为你赋的数值超过了它本身的最大数值,最小也是一样的意思

B. C语言基本整型的数据范围什么意思

基本整型变量,所占字节数为2,每个字节等于八位二进制数,可以用0和1表示的八位二进制数,2个字节也就是16位二进制。

最高位表示正负,所以用0和1组成的16位数字范围为-2的15次方~2的15次方,也就是-32768~32767。因此基本整型变量数据范围是-32768~32767。

字节构成信息的一个小单位,并作为一个整体来参加操作,比字小,是构成字的单位。

在微型计算机中,通常用多少字节来表示存储器的存储容量。

例如,在C++的数据类型表示中,通常char为1个字节,int为4个字节,double为8个字节。

C. C语言int的取值范围

C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。

C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

基本数据类型:

void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)

char:字符型类型数据,属于整型数据的一种。(K&R时期引入)

int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)

float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

_Bool:布尔型(C99标准新增)

_Complex:复数的基本类型(C99标准新增)

_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)

_Generic:提供重载的接口入口(C11标准新增)

(3)c语言整型字节取值范围理解扩展阅读:

1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。

C89在1990年被国际标准组织ISO(International Standard Organization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。

1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

D. C语言int的取值范围

C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。

C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

基本数据类型:

void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)

char:字符型类型数据,属于整型数据的一种。(K&R时期引入)

int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)

float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

_Bool:布尔型(C99标准新增)

_Complex:复数的基本类型(C99标准新增)

_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)

_Generic:提供重载的接口入口(C11标准新增)

(4)c语言整型字节取值范围理解扩展阅读:

1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。

C89在1990年被国际标准组织ISO(International Standard Organization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。

1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

E. 为什么C语言中有符号整型变量的取值范围是-32768~32767,麻烦详细解释一下

答:有符号整型变量的取值范围是-32768~32767,这是过去16位计算机的int类型整数的表示范围,因为16位二进制可表示65536个十进制数据,如果表示无符号整数则其范围为:0 到 65535,而要表示有符号的十进制数据,那么最高位就是符号位,正数的范围为:0 到 32767,其二进制数就是:0000 0000 0000 0000 到 0111 1111 1111 1111;负数的范围为:-1 到 -32768,其二进制数就是:1111 1111 1111 1111 到 1000 0000 0000 0000 ,两者所表示数据的个数恰好是65536个十进制数据。

F. C语言中数据类型所占字节数与它取值范围的关系

C语言中的数据类型,简单的可以分为整数类型和浮点数类型。所占字节数与取值范围的关系实际上是整数编码和浮点数编码的问题,整数编码的三种方式是原码、反码、补码,很容易理解,浮点数的编码格式使用的是IEEE754编码。


1、整数编码以字符类型为例。

字符类型占1个字节,共8位二进制bit位,因此排列组合数,有2^8 = 256种编码的方法。如果表示无符号字符类型,那一般来说表示【0,255】这256个数。


如果表示有符号char类型,如果表示正数,那最高位符号为0,因此可表示的最正整数是:

0-111 1111 ,转化成十进制就是127。同样的道理,符号为1表示负数。最小的负数是

1-000 0000,转化成十进制数就是-128,因此有符号char类型表示的范围是[-128,127]。


一般来说,假设整型数据类型占的二进制位数n,如果表示无符号整数则取值范围是[0,2^n-1],如果表示有符号整数,【-2^(n-1) , 2^(n-1) - 1] 。


2、浮点数类型

浮点数编码一般采用的是IEEE754的编码规则,这个编码格式主要指出了浮点数有效数字、指数以及符号位所占的二进制位数。简单概括为:


格式 长度 符号位 指数位 尾数位 有效位数 指数偏移 尾数说明

单精度 32 1 8 23 24 127 有一位隐含位

双精度 64 1 11 52 53 1023 有一位隐含位

扩展双精度 80 1 15 64 64 16383 没有隐含位

注意:扩展双精度格式没有隐含位,因此它的有效位数与尾数位数一致,而单精度和双精度格式均有一位隐含位,因此它们的有效位数比尾数位数多1。


一般很少自己手动来算浮点数的取值范围,可以使用如下程序来计算。

#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
typedefstructFP_DOUBLE
{
unsigned__int64fraction:52;
unsigned__int64exp:11;
unsigned__int64sign:1;
}fp_double;
typedefstructFP_EX_DOUBLE
{
unsigned__int64fraction;
unsigned__int32exp:15;
unsigned__int32sign:1;
}fp_ex_double;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱规范数:%le ",(double)x);
doubley;
fp_double*fp_d=(fp_double*)&y;
fp_d->sign=0;
fp_d->exp=0x7fe;
fp_d->fraction=0xfffffffffffff;
printf("double最大数:%le ",y);
fp_d->sign=0;
fp_d->exp=0x1;
fp_d->fraction=0x0;
printf("double最小数:%le ",y);
fp_d->sign=0;
fp_d->exp=0;
fp_d->fraction=0x1;
printf("double最小弱规范数:%le ",y);
charch[10];
fp_ex_double*fp_ex_d=(fp_ex_double*)ch;
fp_ex_d->sign=0;
fp_ex_d->exp=0x7ffe;
fp_ex_d->fraction=0xffffffffffffffff;
//不知道扩展双精度浮点数如何输出,
//不过可以用od跟踪,然后找到ch[0]的地址,在数据窗口中选择浮点80为长双精度,
//就可以看到数值了。
fp_ex_d->sign=0;
fp_ex_d->exp=0x1;
fp_ex_d->fraction=0x8000000000000000;
fp_ex_d->sign=0;
fp_ex_d->exp=0;
fp_ex_d->fraction=0x1;
return0;
}

G. C语言中,unsigned int型数据的取值范围是

0到65535。

举例:

unsigned a;

a=5;

或:unsigned int a;

a=5;

16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned int能存储的数据范围则是0~65535,在计算机中,整数是以补码形式存放的。

系统使用

无符号数只表示大小,有符号数最高位(二进制情况下最高位表示符号位),在同一操作系统下,有符号数和无符号数的最大数值在大小上的关系是2*x+1。二者表示的数据范围大小是相同的,但是范围不同。

C支持所有整形数据类型的有符号数和无符号数运算。尽管C标准并没有指定某种有符号数的表示,但是几乎所有的机器都使用二进制补码。

通常,大多数数字默认都是有符号的,C也允许无符号数和有符号数之间的转换,转换原则是基本的位表示保持不变。因此在一台二进制补码机器上,当从无符号数转换为有符号数时,效果就是应用U2Tw,而从有符号转换为无符号数时,就是应用函数T2Uw,其中w表示数据类型的位数。

H. 为什么C语言中的整型取值范围是--32768~32767,是按什么规则规定,推理的

整型的宽度是一个字,也就是2个字节,16个二进制位,最高一位二进制位用来表示符号(正或负),那么剩下的15位来表示数值。
01111111
11111111是32767,最大的正整数
00000000
00000001是1
00000000
00000000是0
11111111
11111111是-1(不是-32767)
10000000
00000001是-32767(不是-1)
10000000
00000000是-32768(不是-0),最小的负整数
计算机表示数主要从运算方式的一致性来考虑。
比如00000000
00000001表示1很好理解,但是11111111
11111111为什么是-1呢?
按照二进制加法
11111111
11111111
+
00000000
00000001=
1
00000000
00000000
结果超出了整型的宽度,溢出部分被忽略,最后的计算机结果是00000000
00000000
那么换成十进制,?+1=0,所以11111111
11111111表示成十进制就是-1