有关C语言中int型数据的取值范围的问题
发布网友
发布时间:2022-03-25 18:04
我来回答
共3个回答
热心网友
时间:2022-03-25 19:34
是这样的,现在计算机中表示有符号数用的几乎都是2的补码表示法(two's complement),像C语言中的int、long等就是用这种表示法。而表示无符号整数(即非负整数,如unsigned int)用的是原码表示,计算其十进制真值时直接按权展开就行。
将用2的补码表示的二进制转化成十进制有好几种方法,最规范的一种是按下面的公式计算:
x[n-1]×(-2^(n-1)) + x[n-2]×2^(n-2)+ … + x[1]×2^1 + x[0]×2^0
其中n表示二进制位数,x[n-1]表示第n-1位数(从0开始,从右往左数),注意最高位是乘以(-2^(n-1)),有负号,其它项无负号。
比如设(1111)B用2的补码表示,上面的公式计算其十进制真值的过程是:
........(1111)B =1×(-2^3) + 1×2^2 + 1×2^1 + 1×2^0
................= -8 + 4 + 2 + 1
................= -1
所以(1111)B = (-1)D
实际上,2的补码表示的16位二进制,其十进制真值如下:
……二进制……………………十进制
0000 0000 0000 0000............0
0000 0000 0000 0001............1
0111 1111 1111 1110............32766
0111 1111 1111 1111............32767
1111 1111 1111 1111............-1
1111 1111 1111 1110............-2
1000 0000 0000 0001............-32767
1000 0000 0000 0000............-32768
所以楼主在上面写的“32767即二进制的1111111111111111”是不对的,(1111 1111 1111 1111)B表示十进制数的 -1。
2的补码表示法(其它表示法还有1的补码表示法、移码表示法等)是在计算机组成原理课程中讲的。
要了解更多2的补码表示法,楼主可以Google中搜索“Two's complement”,或者参考:
http://tieba.baidu.com/f?kz=278455703
热心网友
时间:2022-03-25 20:52
计算机内的数据都是补码形式的。因为正数的补码和原码相同,所以正数存放的是他的原码,负数是存放的他的补码(补码求法:取负数的绝对值写成二进制形式,按位取反,加1,就得到了他的补码),这样是为了计算机运算时的简单。【-32767】补=10000000 00000001 【32767】补=【32767】原=01111111 11111111
计算-32767+32767时计算机内的运算就是:10000000 00000001+01111111 11111111=00000000 00000000
是不是简单很多呢?这下明白了吧?
热心网友
时间:2022-03-25 22:26
最前面的一位是表示它的符号!
有关C语言中int型数据的取值范围的问题
是这样的,现在计算机中表示有符号数用的几乎都是2的补码表示法(two's complement),像C语言中的int、long等就是用这种表示法。而表示无符号整数(即非负整数,如unsigned int)用的是原码表示,计算其十进制真值时直接按权展开就行。将用2的补码表示的二进制转化成十进制有好几种方法,最规范的一种...
int在C语言中的取值范围是什么?
在C语言中,int类型的取值范围取决于编译器和操作系统。一般来说,int类型的取值范围为-2147483648到2147483647。int 占用4个字节,每个字节有8个比特,因此共有32个比特。每个比特位可以是1或0,所以共有2的32次方种选择。然而,在表示正数和负数时,我们使用了第一个比特位。其中,0表示正数,1表示负...
c语言int的取值范围
在C语言标准中,int类型通常表示整数,但其具体的取值范围并没有固定规定。这意味着int的取值范围可以因不同的编译器和系统架构而异。2. 在大多数现代系统上的取值范围 在大多数现代计算机系统中,int通常是32位整数类型,取值范围从-2,147,483,648到2,147,483,647。这是基于二进制补码表示法,利用...
在C语言中为什么int型的取值范围是-32768~32767
所以int型取值范围为-32768~32767
请教一个关于int型最大取值范围的问题。
16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。问题三:当int赋值为4294967295时,语法分析会认为这是一个unsigned int型的值,因此它的取值范围是:0~4294967295。Int是将一个数值向下取整为最接近的整数的函数。
int型数据的取值范围怎么算
nt类型在内存中占用了4个字节,也就是32位。int类型是有符号的,因此,32位并不会全部用来存储数据,使用最高位来存储符号,最高位是0,提示数据是正数,最高位是1,表示数据是负数,使用其他的31位来存储数据。C语言没有规定各种整数类型的表示范围,也就是说,没有规定各种整数的二进制编码长度,...
c语言中int取值范围为16位指的是什么16位
答案:在C语言中,int取值范围的16位指的是整数的二进制表示长度,即该整数由16个二进制位来存储和表示。详细解释:首先,我们要理解计算机中数据表示的基础——二进制。在计算机内部,所有的信息都是以二进制的形式进行存储和处理的。二进制是一种基数为2的数制,其最小的单位是位,每位只有两个状态...
C语言中:int 型的范围问题求解
1. int是有符号的,最高位用来作符号位,所以只剩下15或31位来表示数值了 2. 为什么要-1,因为有2的15次方个负数,1个0,2的15次方-1个正数。总共是2的32次方个数字。
c语言中整型数据的取值范围是怎么确定的???
unsigned int 16位 0~2的16次方-1(即65535)unsigned long 32位 0~2的32次方-1(即4294967295)对于有符号数,由于符号位占用一位,并且负数要用补码表示 以8位数据为例:2进制的11111111表示-1,10000000表示-128,所以负数范围-128~-1;2进制00000000表示0,01111111表示127,所以正数...
数据int的取值范围是多少
int是一种数据类型,在编程语言C语言中,是用于定义整数类型变量的标识符。在一般的电脑中,int占用4字节,32比特,数据范围为负2147483648至2147483647。程序中用的最多是一般整数类型(简称“整数类型”或“整型”)和长整数类型(简称“长整型”),整数类型的类型名是“int”,长整型的类型名为“long...