嵌入式linux c 学习笔记3-date

2019-07-12 22:14发布

/* * ===================================================================================== * * Filename: data.c * * Description: 计算机中数的表示 * * Version: 1.0 * Created: 2010年10月29日 10时00分08秒 * Revision: none * Compiler: gcc * * Author: Yang Shao Kun (), cdutyangshaokun@163.com * Company: College of Information Engineering of CDUT * * ===================================================================================== */ 原码=符号+绝对值;即是,将数的符号位化成0/1 表示,数的绝对值和符号一起编码。缺点:0的表示不唯一; 反码:将数字的符号位不变,然后其余的各项取反。比如: X=-1100110,x原=111100110,x反=100011001; 那么我们可以看出反码和原码的关系为: 负数的反码的符号位和原码相同,其余的各位取反; 反码缺点:0的表示不唯一; 补码:我们知道计算机中,补码采用的是2的补码方式;2‘s complement 具体为: 负数先取反码再加1;(0的表示是唯一的) 浮点数在内存的存放: 符号位 指数位 尾数位 1 bit 7 bits 24 bits 这个和具体的编译系统有关; 指数位多,数的范围就越大,尾数位多,数就越精确。 我们现在知道,如果要表示一个不是小数的浮点数是比较容易的,那如果要表示一 个小数的时候该如何呢? -1 比如:0.25=(0.1)*2,而我们的模型中没有规定如何表示符号位。 那么我们引入了"偏移的指数",具体是: 规定一个偏移值,实际的指数要在加上这个偏移值 在填写到指数部分。 那么:比偏移值大,正数,比偏移值小 ,负数。 但是我们又遇到个问题,那就是,我们的浮点数的表示不唯一,那么其在内存中 的存放形似也不通,那么,我们就要设计更多的电路来实现。 所以:我们就需要一个标准: 我们规定: 尾数部分的最高位必须是1 ,也就是说尾数必须以0.1开头。。 那么:由于尾数部分都是1,我们就可以不保存了(要注意); sequence point and side effecf: example: int a=0;a=a++; 安装运算符的优先级,应该先运算a++,在把表达式的值赋值给a。a的初值是0, 则表达式的a++的值是0,现在有两个side effect,一个是在计算表达式a++之后 应该把a改成1,另外的一个是把表达式a++的值0赋给等号左边的a,那个先发生不一定。 所以 结果:a的值是undefined。