C语言中数据类型取值范围的计算的理解与总结
c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigned)。这些数据类型都有一个取值范围,下面我就通过char类型来表达我对数据类型取值范围的计算的理解。
大家都知道 char 类型是1个字节=8个二进制位,其取值范围是:-2^7~2^7-1;那么这个取值范围是怎么计算得来的呢,首先我们说说,在计算机中,一个变量的最高位表示符号位,规定0代表整数,1代表负数;剩下的其他为的值为这个变量的值。所以,在char类型中,最大的正整数为:0111 1111(2^7-1:可以将0111 1111看成是1000 0000-1所得)。最小的负整数为:1111 1111 (-(2^7-1))。咦!前面不是说最小的是-2^7么?
当我们以二进制原码表示时:取值范围:1111 1111(-(2^7-1))~1000 0000(-0)和0000 0000(+0)~0111 1111(2^7-1),所以从这里我们可以看出,编码情况要比真实的数值情况多出一种:1000 0000和0000 0000都表示0这个数
但是在计算机中,存储数据采用的是补码的方式进行存储的,也就是正数的编码不变,即正数范围依旧是0000 0000(+0)~0111 1111(2^7-1),而负数需要符号位不变,其他位取反,取反后再加1,所以我们就直接来看1000 0000(-0),其补码为0000 0000,好了,到了这里,我们可以看出,计算机以补码的方式存储变量时,不管是+0还是-0,其编码都变成了0000 0000,所以 那么就多出来了一个编码1000 0000,,但是因为任何一个原码都不可能在转变成补码时是1000 0000,因此就人为的规定1000 0000 为-2^7。
所以,最后我们得到char的取值范围就是 -2^7~2^7-1;
C语言中数据类型取值范围的计算的理解与总结的更多相关文章
- C语言各种数据类型取值范围
速查表: char -128 ~ +127 1Byte -2^7 ~ 2^7-1 unsigned char 0 ~ 255 1Byte 0 ~ 2^8-1 short -32767 ~ + 3276 ...
- C语言中数据类型的取值范围
C语言中数据类型的取值范围如下:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 ...
- C语言数据类型取值范围
一.获取数据类型在系统中的位数 在不同的系统中,数据类型的字节数(bytes)不同,位数(bits)也有所不同,那么对应的取值范围也就有了很大的不同,那我们怎么知道你当前的系统中C语言的某个数据类型的 ...
- 【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题
最近再次复习C++语言,用的教材是<C++ Primer>这本教材, 看到第二章的时候,里面有个问题困扰了我. 于是想上网查查怎么回事, 结果看了很久都没有得到一个满意的答案. 书上有这么 ...
- Loadrunner中参数化取值方式分析
Loadrunner中参数化取值依赖两个维度: 1.取值顺序分为“顺序”“随机”“唯一”. select next row:Sequential , Random,unique 2.更新值时分为 ...
- R语言中的特殊值 NA NULL NaN Inf
这几个都是R语言中的特殊值,都是R的保留字, NA:Not available 表示缺失值 用 is.na() 来判断是否为缺失值 NULL:表示空值,即没有内容 用 is.null() 来判 ...
- Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题)
Laravel 中 Session 的使用问题(dd()导致laravel中session取值问题) 一.总结 一句话总结: Laravel 会首先收集需要写入 Session 的所有数据,并在用户的 ...
- C语言数据类型取值范围解析
版权声明:本文为博主原创文章,未经博主允许不得转载. 为什么int类型的取值范围会是-2^31 ~ 2^31-1 ,为什么要减一呢? 计算机里规定,8位二进制为一个字节,拿byte来说,一个BY ...
- C语言中数据类型和变量
C语言中的数据类型 数据类型的本质,固定大小内存块的别名. 数组名代表数组首元素的地址. 数组首元素的地址,&代表整个数组的地址. 数组数据类型,怎么定义数据数组类型,定义数组类型指针,数组类 ...
随机推荐
- toolkit学习笔记
- 算法课堂笔记14—NP-COMPLETENESS
今天的算法课接着上一节,说的是NP问题. 1.关于什么是P和NP问题 所谓P问题是指所有能在多项式复杂度解决的问题,比如排序算法,n*n复杂度解决问题.而对于有些问题,目前可能没有多项式复杂度的解决方 ...
- HDU 4940 Destroy Transportation system(2014 Multi-University Training Contest 7)
思路:无源汇有上下界可行流判定, 原来每条边转化成 下界为D 上界为 D+B ,判断是否存在可行流即可. 为什么呢? 如果存在可行流 那么说明对于任意的 S 集合流出的肯定等于 流入的, ...
- SSH框架构建微信公众帐号服务器小技巧
SSH框架构建微信公众帐号服务器小技巧 熟悉struts2和servlet的同学应该清楚,struts2的方法多样性弥补了servlet单一的doGet 和doPost方法.如果自己的公众账号服务器是 ...
- 递归问题==优化 还有数据库sqlreader
reader尽量不要用获取列名方式 用索引比较好. int i= reader.GetOrdinal("<#=c.ColumnName#>"); reader[i ...
- 学习Nim语言.rar(nim语言中文教程下载)
学习Nim语言 nim 语法上类似python ,是一门静态编译型语言,nim 使用空格缩进标示语句块的开始和结束, 喜欢python风格的程序员应该也会很容易适应和喜欢nim的风格. nim语言官方 ...
- php大力力 [040节] 买了一天域名,整了一天后台,新网后台不懂啊
php大力力 [040节] 买了一天域名,整了一天后台,新网后台不懂啊]]] 还有万网那些域名要备案,备案,备案中...................wqnmlgb 今天摩托车的前后轮被扎了,tnn ...
- Linux的yum源的配置
yum实际上是管理的rpm软件包 只要连接网络就可以使用在线的yum源,不用配置本地yum源 网络yum源/etc/yum.repos.d/fedora.repo(Fedora)[fedora]nam ...
- GCD的其他方法
1.栅栏函数 作用:控制线程的执行顺序 注:栅栏函数不能使用全局并发队列 -(void)barrier { //1.创建队列(并发队列) dispatch_queue_t queue = dispat ...
- 2016年12月11日 php面向对象
面向对象 1.类(由众多对象中抽象出来的) 2.对象(一切皆对象,由类实例化出来的). 类: 求圆的面积 面向过程的方式 1.将圆抽象为一个类 2.实例化对象 class Qiu { var $ban ...