在C语言中,int型数据的取值范围?
来源:互联网 发布:淘宝网男士的鞋子 编辑:程序博客网 时间:2024/05/22 06:30
在C语言中,int型数据所占的字节和具体的编译器有关,32位编译器int占4个字节(VC,C-free),16位编译器int占2个字节(详见“int型数据所占字节和什么有关”)。
以两个字节为例:
在C中,int型数据是一个有符号的整型数据,其最高位为符号位(0表示正,1表示负)
1个字节等价于8个二进制位,在很多计算机系统中,通常采用补码来表示带符号的数(补码系统)
现在从二进制的原码,反码,补码开始讨论……
原码:最高位为符号位(0表示正,1表示负),其他位按照一般的方法来表示数的绝对值
反码:对于一个带符号的书来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反
补码:正数的补码与其原码相同,负数的补码为其反码在最低位加1
两个字节,所以,二进制原码最大为0111 1111 1111 1111 = 2^15 - 1 = 32767
最小为1111 1111 1111 1111 = - (2^15 - 1) = -32767
原码中0的表示有正负之分[+0]原 = 0000 0000 0000 0000;[-0]原 =1000 0000 0000 0000
所以二进制原码表示时,范围是 -32767 ~ -0和0~32767,因为有两个0,所以不同的数值个数一共有2^16 - 1个
而计算机采用而进驻补码存储数据时,0的表示是唯一的:[+0] 补= [-0] 补= 0000 0000 0000 0000
此时正数编码不变,从0000 0000 0000 0000 ~ 0111 1111 1111 1111依然表示0 ~ 32767,
负数表示需依照补码规则,即-32767的补码为1000 0000 0000 0001
所以补码中会比原码多一个编码出来,这个编码就是1000 0000 0000 0000,因为任何一个原码都不可能在转化成补码时变成1000 0000 0000 0000,所以人们规定1000 0000 0000 0000这个补码编码为-32768
综上所述,int型数据占两个字节时,可表示2^16种变化,最高位为符号位,所以正负有2^15中变化,因为0也占一种,因此正负数的最大值并不对称,即该int型数据取值范围为-32768 ~ 32767
- 在C语言中,int型数据的取值范围?
- C语言int的取值范围
- C语言中int的取值范围是怎么算出来的
- C语言中int的取值范围是怎么算出来的
- C语言中基本类型char、short、int、long等类型的取值范围
- C语言中基本类型char、short、int、long等类型的取值范围
- C语言:int型、long型和long long型的取值范围
- 在C语言中为什么int型的取址范围为-2的15次方到2的15次方减1?
- Java中int的取值范围
- Java中int的取值范围
- Java中int的取值范围
- 【c语言_取值范围】int long longlong
- C语言中,各类型数据所占字节数及与它取值范围的关系
- C语言中,各类型数据所占字节数及与它取值范围的关系
- C语言各种数据类型及其在系统中占的字节和取值范围
- C语言各种数据类型在系统中占的字节和取值范围
- C语言各种数据类型在系统中占的字节和取值范围
- C语言各种数据类型在系统中占的字节和取值范围
- Android实现访问Sqlserver
- TagSupport类的生命周期
- 数据结构 - 二叉树的遍历
- 笔试面试题
- 2012年7月2号----ListView中如果有Button时,点击Button得到当前点击的行号
- 在C语言中,int型数据的取值范围?
- 一个统计Word文档中行数的VBA例程
- 网页注册机运行成功了!!!那个激动啊!!(VC下纯C代码) 记下我编写注册机的全过程
- Running CMD.EXE as Local System
- Android软件如何进行推广?十种推广方式可以值得借鉴
- linux下用eclipse搭建python集成开发环境!
- 算法导论 11.1-4 大数组的直接寻址表
- android程序查詢包含"*" "#"的號碼時出錯的解決辦法
- 拷贝构造函数之我见