C语言整形数值范围问题

如题所述

有符号二进制数的表示方法由计算机字长决定。字长为n位时,最高位为符号位,其余n-1位表示数值。补码表示法下,数值范围是 -2^(n-1) ≤ X ≤ 2^(n-1)-1。例如,16位计算机中数值范围为 -32768到32767。

计算机使用原码、反码和补码表示数据。原码以最高位作为符号位(0表示正,1表示负),其他位表示数值的绝对值。反码规则:正数原码表示,负数将符号位保留1,其他位取反。补码是计算机数据表示的通用方式,正数表示与原码相同,负数是反码加1(原码数值位取反,最低位加1)。

正数原码、反码和补码相同。32767的二进制原码是0 111 1111 1111 1111,因此反码、补码表示也是如此。负数-32768在16位计算机中表示不全,但其原码1 000 0000 0000 0000,反码0 111 1111 1111 1111,补码1 000 0000 0000 0000恰好表示-32768。

两个有符号数进行加减运算时,结果超出表示范围会发生溢出,导致计算机结果错误。溢出发生在同号数相加或异号数相减。两正数相加超范围变为负数;两负数相加超范围变为正数(减法等同于两个负数相加)。例如,-1的补码表示为1111 1111 1111 1111,即1000 0000 0000 0000 + 1111 1111 1111 1111时,最高位有进位输出,发生溢出,形成0111 1111 1111 1111,这是有符号十进制数32767的二进制表示,结果自然为32767。
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言整形数值范围问题
有符号二进制数的表示方法由计算机字长决定。字长为n位时,最高位为符号位,其余n-1位表示数值。补码表示法下,数值范围是 -2^(n-1) ≤ X ≤ 2^(n-1)-1。例如,16位计算机中数值范围为 -32768到32767。计算机使用原码、反码和补码表示数据。原码以最高位作为符号位(0表示正,1表示负),其...

c语言中,基本整形,取值范围-32768到32767什么意思
就是说如果你定义一个整型变量,数值为32768,那么就会出现运行错误,因为你赋的数值超过了它本身的最大数值,最小也是一样的意思

C语言中short整型数据的范围-32768---32767是中的-32768是如何确定的...
表示正数时,最高位为符号位(正数的符号位为0),最大的正数为0111 1111 1111 1111 即2^15 - 1 = 32767

为什么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...

c语言整形数值取值范围为什么有负数
整数 分为正整数 负整数 0 如果用最高为做符号位的话 c语言里就会出现负数 使用sizeof(类型) 来确定范围 sizeof(int) 如果等于4的话 那么表示4*8=32 bits 2^32=4294967296 int 范围就是-2147483647~2147483648 sizeof(int) 如果等于2的话 那么表示2*8=16 bits 2^32=65536 int 范围就是-...

关于c语言整型常量的范围问题
1、测试结果不正常 2、以下内容来自《C Primer Plus (第6版)》,供您参考 3、C语言中有类似的机制,int偷偷转变成long,或者float转变成double,但并不是一定的。编程时请严格按照数据类型规定的容量范围使用。

c语言整形变量 如何改变变量存储的数值上限
在声明变量的时候,就已经确定了数据占内存的字节数。比如说在vc6.0的编译器,int是四个字节,float是4个字节,doble是8个字节。是无法让变量的数值超过默认的。像17阶乘这种大整数,在科学计算机是可以解决的。不过个人机貌似处理不了那么多位数的计算。32位机最大只能运算到2^32。64位机就不懂了...

为什么c语言中长整形和单精度实型同样占4个字节,数值范围却相差这么大...
长整型(long)类型是二进制定点编码;而单精度(float)类型是二进制浮点编码,其中包含有8位阶码(E),表示乘以2的E次幂,具体请查IEEE二进制浮点数算术标准(IEEE-754);因此单精度类型可以表示的范围远大于长整型类型。

C语言中整型的范围是多少?
整型指短整型,所以正确。C. 是浮点数 B. 你的题目是古老的编译器上的题目,所以 510000 数值范围超界 A. 32L 是 长整型 ,你的题目是古老的编译器上的题目,整型指短整型,所以错误。=== 现在的编译器认为 A,B,D 都是正确的整型常量。C. 是浮点数 ...

C语言中长整形4个字节的数据范围是多少?
如果是有符号数,那么最高位就是符号位,其他31位是数值位,那么最大正数就是(2的31次方)-1;而负数是补码表示的,也就是反码+1,所以1000..00(31个0)就表示-2的31次方,所以最小数就是-2的31次方。所以对于4个字节的长整数,unsigned的范围就是 0 到 2^32 -1 有符号数的范围就是 -2...

相似回答
大家正在搜