C语言数据类型取值范围
一、获取数据类型在系统中的位数
在不同的系统中,数据类型的字节数(bytes)不同,位数(bits)也有所不同,那么对应的取值范围也就有了很大的不同,那我们怎么知道你当前的系统中C语言的某个数据类型的字节数,位数呢?
由于本人是初学,所以下面的代码是硬编程了,获取一个数据类型的字节数和位数:
/* 获取数据类型在当前系统中的字节数(bytes)和位数(bits) */
#include <stdio.h>
int main(void)
{
//1个字节 = 8位
printf("整数类型:int;bytes = %d;bits = %d\n",sizeof(int),sizeof(int) * );
return ;
}
上面的代码中使用的函数sizeof来获取数据类型对应的字节数,对应的位数也就出来了,那么很多时候在编程的时候,要是我们不知道数据类型在本系统中的位数和取值范围的话,很容易出现问题:数据类型的值向上溢出,或者向下溢出了,而我们还不知到怎么回事,这个时候找问题就很费劲了
二、获取整数数据类型对应的取值范围
首先来举个例子:
数据类型:char(字符串,实际以整数存储)
字节数:不管在哪个操作系统中都是1个字节
位数:1个字节 = 8位(以二进制存储)
无符号取值范围:00000000 ~ 11111111 (有8位二进制数存储),那么结果char的取值范围是0~255
有符号取值范围:-2^7 ~ (2^7)-1 也就是-128 ~ 127
那可能你会问了,为什么计算有符号的取值范围时,最后需要减1呢?请看下面的分析:
有符号取值范围分正数:127 =(转换成二进制)=>1111111(这里二进制只有7位,换句话说,实际二进制值是01111111)
有符号取值范围分负数:-128 =(转换成二进制)=>10000000(刚好是8位)
不知道大家有没有发现他们的区别?
区别(update 2016-11-10 感觉这个最高位区分正负数很矛盾啊!有待验证):
正数:二进制的最高位是0,最高位是0表示正数
负数:二进制的最高位是1,最高位是1表示负数
引申一个问题:怎么区分一个二进制数的正负呢?如何区分二进制补码还是原码????
也就是说二进制也有正数和负数的区别(讲个插曲,之前我学进制转换的时候做练习题,看到有负数,我当时就干蒙了,现在才明白是这么区分的)
同样的,其他的数据类型都是这么计算的,下面总结一下计算公式,方便快速计算数据类型的取值范围:
下面的bits = 数据类型的字节数 * 8;
signed typeName(有符号的数据类型取值范围):-2^(bits-1) ~ (2^(bits-1))-1
unsigned typeName(无符号的数据类型取值范围):(2^bits)-1
三、浮点数的取值范围
暂时我不知道怎么计算,使用的是c的函数库来获取的
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%e\t%e\n",FLT_MIN,FLT_MAX);
return ;
}
引用函数库float.h ,使用FLT_MIN和FLT_MAX获取浮点数的取值范围
本人初学,有错误欢迎指出来,大家共同进步!
C语言数据类型取值范围的更多相关文章
- C语言数据类型取值范围解析
版权声明:本文为博主原创文章,未经博主允许不得转载. 为什么int类型的取值范围会是-2^31 ~ 2^31-1 ,为什么要减一呢? 计算机里规定,8位二进制为一个字节,拿byte来说,一个BY ...
- C语言中数据类型取值范围的计算的理解与总结
c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigne ...
- java基本数据类型取值范围
在JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数 ...
- Java进阶(十一)部分数据类型取值范围
java整型byte,short,int,long取值范围大小 在项目开发中,需要用到随机数的生成方法,代码如下: public static String randomizeNumber(int n ...
- SQL 用于各种数据库的数据类型(转载) sqlserver 数据类型 取值范围 长度
SQL 用于各种数据库的数据类型 来源 http://www.runoob.com/sql/sql-datatypes.html 面向数据库编程中,数据类型的取值范围.长度,可能是需要经常查看的 ...
- java数据类型取值范围
1个字节:boolean, byte 2个字节:short, char 4个字节:int, float 8个字节:long, double 按照我们初学者的理解1byte=8bit,也就是说1个字节可 ...
- C语言各种数据类型取值范围
速查表: char -128 ~ +127 1Byte -2^7 ~ 2^7-1 unsigned char 0 ~ 255 1Byte 0 ~ 2^8-1 short -32767 ~ + 3276 ...
- 学习笔记28—Python 不同数据类型取值方法
1.array数据类型 1)-------> y[i,] 或者 y[i] 2.遍历目录下所有文件夹: def eachFile(filepath): pathDir = os.list ...
- Java连载10-数据类型取值范围&转义字符
一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...
随机推荐
- Python学习笔记(一)——环境搭建
一.安装包下载: 国内镜像:32位:http://pan.baidu.com/s/1jI4q4lS 64位:http://pan.baidu.com/s/1eRPhpRW 版本更迭速度很 ...
- 【maven】maven创建web项目-pom文件提示web.xml is missing and <failOnMissingWebXml> is set to true
使用maven创建web项目,选择war类型后,pom文件红叉 提示web.xml is missing and <failOnMissingWebXml> is set to true ...
- 使用python解析Json字符串-获取Json字符串关键字
import json data = { "statusCode": 0, "data": { ", "height": &quo ...
- android 修改 SwitchPreferenceCompat 高度,内边距,字体大小
public class FontSizeSwitchPreferenceCompat extends SwitchPreferenceCompat { private Context mContex ...
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...
- 基于.NET的免费开源的模板引擎---VTemplate(转)
1.VTemplate模板引擎的简介 VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象.当VTemplate ...
- python练习
创建一个简单的姓名和编号系统,让用户输入一组人的姓名和编号,实现提供按照编号或姓名排序输出的功能. nums = [] names = [] Afternums = [] Afternames = [ ...
- windows环境 andorid JNI开发
1.下载并安装GNUstep 下载地址:http://www.gnustep.org/experience/Windows.html 安装文件 a.GNUstep MSYS System b.GN ...
- iOS宏和__attribute__
本文目录 iOS宏的经典用法 Apple的习惯 __attribute__ iOS宏的经典用法 1.常量宏.表达式宏 #define kTabBarH (49.0f) #define kScreenH ...
- bzoj1724: [Usaco2006 Nov]Fence Repair 切割木板(贪心+堆)
一开始被题目读错题= =以为每次只能割一块,那么就是从大到小切 但是其实是可以分为几堆来切的 所以可以逆着来,变为合并n个木板代价最小 易证每次找最小的两堆合并代价最小 用优先队列维护堆..偷偷懒= ...