位指的是短小的二进制数字,是一个二进制的赋值变量。一个单一的位只能代表两个值所以我们要把他们组织到一起才能表示更广范围的数字。位的最常组织方式是字节,它是一个八位的位组数列。

将这些位组织到一起后,有一些方法可以用来对他们进行解释。我们将每一种解释方法称为位模式。
1.纯数字位模式
最简单的位模式是用于非负整数的。即为我们所理解的普通的二进制表示数字那种,没有正负之分。
给定一个八位的位组,它能够存储的最大的整数位
2^8-1=256     范围是0~256,
具有2的最低次方的位被称为最小有效位(least significant bit)或最低位(lowest-order bit),相反具有2的最高次方的位称为最大有效位或最高位。
通过将4个字节组合在一起,则纯数字位模式就可以表示一个高至2^32-1=4294967295
c语言中,有几个数据类型使用了纯数字位模式,一个是unsigned char类型是一个1字节(8位)变量,数值范围0~256.在32位系统中,一个unsigned int类型是一个4字节变量,它能够表示0~4294967295.一个unsigned short int
2字节变量,表示0~656535.在技术上c语言并没有规定int类型的大小。
2.符号数字位
模式在想表达带有符号位模式的整数时,比较常见的方法是将最高位分配位符号位(sign bit)者称为符号位模式
符号位为0表示正数,1表示负数,
符号位模式有两个缺点。首先0可能有两个位值:00000000或10000000更重要的是使用符号数字位模式,使二进制的加法变得复杂了。由于者两个缺点,所以在c语言中没有数据类型使用符号数字模式。通常仅在简单的计算电路,或这些缺陷确定不会带来麻烦的设计问题中,才回看到符号数字位模式。
3.二进制补码位模式
使用二进制补码位模式,整数和零被解释成和纯数字位模式完全一样的结果,而负数的表达则需要通过以下几步
1. 列出用来表达该数整数的位
2.取反(反转)所有位
3.加一
拿-7举个栗子

正的值               0     0     0     0     0     1     1     1
取反所有的位     1     1     1     1     1     0     0     0
加一                  1     1     1     1     1     0     0      1 

当一个二进制不啊位模式数字在其最高位是一的时候,他所表达的就是一个负数为确定这个值我们进行相同的操作步骤

未知的值(-?)    1     1     1     1     1     0     0     1
取反所有位            0     0     0     0     0     1     1     0
加一                      0     0     0     0     0     1     1     1

所以未知的值就是负七
二进制补码位模式位我们解决了纯数字位模式中的双零问题。用来表示零的唯一一种位排列方式就是00000000.
使用符号位模式,位的组合10000000表示负零,在二进制补码位模式中,它表达的是-128

未知的值(-?)    1     0     0     0     0     0     0     0
取反所有位            0     1     1     1     1     1     1     1
加一                      1     0     0     0     0     0     0     0

10000000表示-128这个数被称为奇异数。所以二进数制补码位模式表达数的范围就是-128~27.
二进制补码位模式还是的实现加法和减法变得更加容易,因为,在不考虑两个输得符号的情况下,他们总是被相加,
由于有效位表达数值的范围是有限的,所以当两个数的和超出范围是就会出现算术溢出的问题。在计算机系统中,二进制位模式是用来表示符号整数的最常见模式
4.浮点位模式
为了存储实数我们可以使用能够定点位模式和浮点位模式两种。
定点位模式在小数部分中用来表达小数位的个数是固定的。我们认为这是一个限制,而且对位的使用也是有限的。
利用浮点位模式
这里我们用的是二进制中的科学技术法,即
18.375=10010.011=1.0010011x2^4
我们假定前导值是一,就可以简化对一个数的存储
浮点位模式是按照下面方式来存储数的
1.fx2^e
必须被存储的数就是用来表示符号的位,用来表示小数f的位以及用来表示指数e的位。其余可以使用的位可以在小数部分和指数部分进行分配。给定32位(4字节)标准就是使用23位来表达小数,8位来表示指数

所有的位               1                   8                         23

                         符号           指数e                       小数f
位序                     31               30…23                  2…0

用于指数的8个位用来表达的范围是-127~128.在十进制中能够使用的所有精度在使用4字节浮点位模式是大约是8节。
可以使用一下步骤将一个数从十进制换成使用浮点位模式的二进制
1.写出符号位
2.按照定点二进制方式写出没有符号的数
3.规格化,将基点(十进制小数点)移至第一个1的后面
4.将f赋值位基点后面的部分,不足位补零。
5.将e赋值位给定的指数,通过+127改变它的值
举个栗子
-118.625
(1)s=1
(2)118.625=1110110.101
(3)1110110.101=1.110110101x2^6
(4)f=110 1101 0100 0000 0000 0000
(5)e=6+127=133=1000 0101
1 1000 0101 110 1101 0100 0000 0000 0000
指数通过加上127进行了改变,以便能够计算能够指数保存为一个纯数值,并且依旧表达-127~128之间的数,
在c语言中,数据类型float使用4个字节来存储一个实数,而数据类型double则使用8个字节来存储一个实数。double类型依旧使用1位表示符号,但它使用11位表示指数并使用52位来存储小数部分。能够表示更广范围内的数。
5.ASCll和Unicode位模式
 
为了表示非数值数据,就必须是使用另外一种位模式。ASCll(美国国家信息交换标准码)位模式就是位表示英语文本符号以及为了打印英语文本需要的控制字符而制定的。
在c语言中数据类型char 和unsigned char都使用了ASCll位模式
使用格式符%c函数,调用printf()将使用ASCll位模式来解释变量。使用格式符%d(或%i),函数调用printf()
将变量解释位为一个整数。对数据char而言printf()函数使用二进制补码位模式解释变量,而对unsigned char,printf()函数则使用纯数字位模式解释变量。

转载于:https://www.cnblogs.com/xiabb/p/4223234.html

C语言如何根据数据类型来处理不同的数据?相关推荐

  1. python语言的数据类型有哪些_Python语言有哪些数据类型

    在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-80 ...

  2. Go语言基础之数据类型

    Go语言基础之数据类型 Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. ...

  3. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  4. C 语言编程 — 高级数据类型 — 字符串

    目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...

  5. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  6. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  7. C 语言编程 — 高级数据类型 — 枚举

    目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...

  8. C 语言编程 — 高级数据类型 — 数组

    目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...

  9. C 语言编程 — 高级数据类型 — 指针

    目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...

最新文章

  1. encodeURI 和 encodeURIComponent
  2. 干掉前端!3分钟纯 Java 注解搭个管理系统,我直接好家伙
  3. GitHub 重磅更新:无限私有仓库免费使用
  4. 算法导论系列:分治算法
  5. python万年历实验报告_Python实现的简单万年历例子分享
  6. java+登录window域认证网页_Java 如何用 token 做用户登录认证
  7. [面试] C/C++ 语法(五) —— extern
  8. f-droid_使用F-Droid在Android上开源
  9. eclipse复制行快捷键与屏幕旋转冲突的解决
  10. 数据投毒攻防对抗技术-1.数据投毒简介
  11. 纪念第一次面试安服-靶机测试过程以及思路
  12. 微信小程序登录 返回 -41003
  13. springboot启动原理及其流程
  14. 使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行)
  15. 100条信号完整性效应的经验法则
  16. VR直播面临的五大技术挑战和实现难点
  17. 高考|考大学不是唯一出路!
  18. oracle vpd策略,oracle vpd 策略查询
  19. 华为路由器console口加密 telnet远程登录 DHCP server在路由器中的两种写法
  20. 对局匹配(动态规划)

热门文章

  1. 阿里对象存储OSS在laravel框架中的使用
  2. python【蓝桥杯vip练习题库】ALGO-142 P1103(复数运算)
  3. 【Network Security!】搭建文件分享服务器,其实也可以很简单-HFS
  4. DL之决策树(Decision tree)
  5. Comet oj比赛组队
  6. 算法提高 邮票面值设计
  7. abb样本-感应电机与发电机手册_防爆电机如何选?
  8. java静态方法加载顺序_java中类以及方法的加载顺序
  9. python中str和input_对python中raw_input()和input()的用法详解
  10. iphone降级_今年 iPhone 将支持手写笔?乔老爷哭了!