C语言再学习——数据类型

C语言数据类型

原码:最高位表示符号位:0表示+,1表示-;

[+1] = 0000 0001

[-1] = 1000 0001

反码:

反码转反码:对反码再一次求反码

正数的反码是其本身;

负数的反码是其原码的基础上,符号位不变,其他位各个取反。

[+1] = [00000001] = [00000001]

[-1] = [10000001] = [11111110]

补码:

补码转原码: 对补码再一次求补码

正数的补码是其本身;

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001] = [00000001] = [00000001]

[-1] = [10000001] = [11111110] = [11111111]

在计算机内部不使用原码(原因:由于在做减法计算时会出现错误),反码(原因:对于0这个数值比较特殊,+0和-0的反码表示不同)表示数值。计算机采用的是补码进行采用存储数据。

详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

数据类型决定了占用内存空间大小。

高占位浮可以打印低占位浮,使数据的大小不会缺失,但是低占位打印高占位可能导致数据的缺失。例如:int类型可以打印short类型和char类型。

float类型:

无论是单精度还是双精度在存储中都分为三个部分:

  1. 符号位(Sign) : 0代表正,1代表为负
  2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
  3. 尾数部分(Mantissa):尾数部分

其中float的存储方式如下图所示:

而双精度的存储方式为:

float和double类型是有精度问题的:float到小数点第6位,double类型的精度是到小数点后面第15位。

如非声明,则为原创 糊涂猫until

时间: 2024-08-04 05:46:15

C语言再学习——数据类型的相关文章

C语言再学习之 setjmp与longjmp

前不久在阅读Quake3源代码的时候,看到一个陌生的函数:setjmp,一番google和查询后,觉得有必要针对setjmp和longjmp这对函数写一篇blog,总结一下. setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理. 先来看一下这两个函数的定义吧: setjmp和longjmp的函数原型在setjmp.h中 函数原型: int setjmp(jmp_buf envb

C语言再学习之内存对齐

昨天看Q3的代码,看到有个_INTSAIZEOF的宏,着实晕了一阵.一番google后,终于明白,这个宏的作用是求出变量占用内存空间的大小,先看看_INTSAIZEOF的定义吧: #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) (ANSI C标准下,_INTSAIZEOF宏定义在stdarg.h中,Q3中定义在bg_lib.h中:bg_lib.h -- standard C library

C语言再学习part3—算法

君子远庖厨,万物皆备于我.—孟子 这篇文章主要总结程序的主要要素,以及程序的构成是什么样子的.最后说说我学到的一种奇特的表示算法的方式—伪代码. 让我们开始吧! 一个程序应该包括以下两个主要要素: 1.对数据的描述.在程序中要指定数据的类型和数据的组织形式,即为数据结构. 2.对操作的描述.即为操作步骤,也就是算法. 那么程序是什么呢? 程序=算法+数据结构+程序设计方法+语言工具和环境[1] 最后来说说被忽略的伪代码.伪代码不同于汇编语言中的伪指令. 伪代码是用介于自然语言和计算机语言之间的文

C语言再学习——数组

1.数组名:地址常量(不能自增,赋值等操作): 2.数组中的元素指的都是变量.可以被赋值. 3.数组长度:数组中元素的个数. 4.数据类型:决定了每一个数组元素占用的内存空间大小. 5.数组占用内存空间大小 = size0f(a[0])*length;    (length:数组长度) 内存不能越界访问,对数组的访问不能超过对应数组的长度. 定义变量时一定记住要初始化,由于未初始化可能会对后续的程序产生不良影响,往往这样的错误很难找,所以需要养成变量初始化的习惯. 如非声明,则为原创 糊涂猫un

C语言再学习——C语言中进制之间的转换

十进制转换为二进制:利用除二取余倒序法 二进制转换为十进制:利用每位二进制数对应的幂乘积. 例如:110 = 1*2^2+1*2^1+0*2^0 十六进制和十进制之间的转换,先转换为二进制后在转换为十进制.(方法:三位一体) 八进制和十进制之间的转换,先转换为二进制后在转换为十进制.(方法:四位一体) 十六进制: A = 10 = 1010b B = 11 = 1011b C = 12 = 1100b D = 13 = 1101b E = 14 = 1110b F = 15 = 1111b 内存

UNIX再学习 -- 文件I/O

在 UNIX/Linux 系统中,一切皆文件,这句话想必都有听过.对于文件的操作几乎适用于所有的设备,这也就看出了文件操作的重要性了.在C语言再学习部分有讲过标准I/O文件操作,参看:C语言再学习 -- 文件 下面我们来讲解下系统文件I/O的. 一.文件描述符 1.文件描述符简介 首先从文件描述符开始讲起.因为,对于内核而言,所有打开的文件都是通过文件描述符引用的.那么文件描述符到底是什么? 文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文

UNIX再学习 -- 环境变量

之前讲gcc编译的时候,参看:C语言再学习 -- GCC编译过程 提到过静态库和共享库,那时只是简单的讲了下它们相关的编译链接,接下来就该详细介绍它们了.不过再讲解之前还需了解一下编程相关的环境变量. 一.环境变量 参看:百度百科--环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等. 环境变量时在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用的信息. 1.Windows下的环境变量 (1)环境变量配置 右击我的

【C语言学习】指针再学习(二)之数组的指针

★一维数组 一个整型数据为4个字节.4个字节就是32位,即可以表示2^32个数字 在程序中定义一个数组a[5] = {1,2,3,4,5}; 那么a[0]的地址就是0x00000000,数组名a是数组首元素的地址,a的地址也是0x00000000.a+1则表示的地址是0x00000004,而不是0x00000001.因为1这个值,根据前面的指针a所指向的类型的长度来调整自己的长度.也就是说如果a是指向整型的指针,那么后面加的1也表示4个字节,如果a是指向字符型的指针,那么后面加的1表示1个字节.

《手把手教你学C语言》学习笔记(6)---数据类型

计算机中需要保存信息,就需要数据存储,数据的存储就需要划分数据类型.主要包括:基本数据类型.指针类型.构造类型.空类型. 基本类型:整型---主要用来表示整数,可以分为无符号和有符号:又分为基本整型.短整型和长整型.    浮点型---带小数点的数,主要分为单精度和双精度类型    字符型---表示字面量 构造类型:数组和结构体.    数组---同种数据的结合,主要包括数组名称.数组的类型和数组的大小    结构体---可以包括C语言中的所有的数据类型的数据 指针类型:所有的类型都可以定义为指