一、获取数据类型在系统中的位数

  在不同的系统中,数据类型的字节数(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_MINFLT_MAX获取浮点数的取值范围

  本人初学,有错误欢迎指出来,大家共同进步!

C语言数据类型取值范围的更多相关文章

  1. C语言数据类型取值范围解析

    版权声明:本文为博主原创文章,未经博主允许不得转载.   为什么int类型的取值范围会是-2^31 ~ 2^31-1  ,为什么要减一呢? 计算机里规定,8位二进制为一个字节,拿byte来说,一个BY ...

  2. C语言中数据类型取值范围的计算的理解与总结

    c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigne ...

  3. java基本数据类型取值范围

    在JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数 ...

  4. Java进阶(十一)部分数据类型取值范围

    java整型byte,short,int,long取值范围大小 在项目开发中,需要用到随机数的生成方法,代码如下: public static String randomizeNumber(int n ...

  5. SQL 用于各种数据库的数据类型(转载) sqlserver 数据类型 取值范围 长度

    SQL 用于各种数据库的数据类型 来源 http://www.runoob.com/sql/sql-datatypes.html    面向数据库编程中,数据类型的取值范围.长度,可能是需要经常查看的 ...

  6. java数据类型取值范围

    1个字节:boolean, byte 2个字节:short, char 4个字节:int, float 8个字节:long, double 按照我们初学者的理解1byte=8bit,也就是说1个字节可 ...

  7. C语言各种数据类型取值范围

    速查表: char -128 ~ +127 1Byte -2^7 ~ 2^7-1 unsigned char 0 ~ 255 1Byte 0 ~ 2^8-1 short -32767 ~ + 3276 ...

  8. 学习笔记28—Python 不同数据类型取值方法

    1.array数据类型 1)-------> y[i,] 或者 y[i] 2.遍历目录下所有文件夹: def eachFile(filepath):     pathDir =  os.list ...

  9. Java连载10-数据类型取值范围&转义字符

    一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...

随机推荐

  1. [工作中的设计模式]享元模式模式FlyWeight

    一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...

  2. 分布式缓存技术memcached学习(三)——memcached内存管理机制

    几个重要概念 Slab memcached通过slab机制进行内存的分配和回收,slab是一个内存块,它是memcached一次申请内存的最小单位,.在启动memcached的时候一般会使用参数-m指 ...

  3. CodeForces 519B A and B and Compilation Errors

    B. A and B and Compilation Errors time limit per test 2 seconds memory limit per test 256 megabytes ...

  4. XIII Open Cup named after E.V. Pankratiev. GP of Ukraine

    A. Automaton 后缀自动机可以得到$O(2n+1)$个状态,但是后缀自动机会拒绝接收所有不是$S$的子串的串,所以在建立后缀自动机的时候不复制节点即可得到$n+1$个状态的DFA. #inc ...

  5. ibatis实现Iterate的使用

    <iterate property="" /*可选, 从传入的参数集合中使用属性名去获取值, 这个必须是一个List类型, 否则会出现OutofRangeException, ...

  6. [DEMO] 互联网广告RTB机制简介

    前言: 传统的互联网广告一般都是大流量网站在页面中留出一定空位,某些推广商家通过买位的方式来展示自己的广告. 我们这里引入一个案例:假设大访问量网站为博客园,想要广告推广的公司为阿里云平台. (场景为 ...

  7. Javascript初学篇章_4(循环与函数)

    七.循环语句 1.While 语法: while (exp){ //statements; } 说明: while (变量<=结束值){ 需执行的代码 } 例: var i=0; while(i ...

  8. 在ubuntu 12.04 x64下编译hadoop2.4

    自己编译hadoop:x64 1.安装依赖包 sudo apt-get install g++ autoconf automake libtool cmake zlib1g-dev pkg-confi ...

  9. ANDROID开发实用小工具

    分享一些 Android开发中的实用小工具,你有发现好工具吗? 来这里分享一下呗 一.find bugs 静态检查工具 http://findbugs.sourceforge.net/ FindBug ...

  10. 第一章-第一题(小学生四则运算)--By郭青云

    1.项目需求 a) 除了整数以外,还要支持真分数的四则运算. (例如:  1/6 + 1/8 = 7/24) b) 让程序能接受用户输入答案,并判定对错. 最后给出总共 对/错 的数量. c) 逐步扩 ...