《代码揭秘-从C/C++的角度探秘计算机系统》读书笔记 之第二章

第2章     揭开数据表示的面纱

        计算机可以用来办公、娱乐、上网、辅助教学。但是归根结底做的事情只有一件,那就是计算。

        对于一个X进制的系统中,其第n位数字的权值就是X的n-1次方。

        C/C++的位操作符有6个。&按位与    |按位或      ^按位异或   ~按位取反  <<左移    >>右移

        使用与操作某些位置0  使用或操作某些位置1  使用异或操作某些位反转。~的运算符优先级要比其他运算符优先级要高。对于有符号数,大多数C语言编译器会采用算术右移,而不是逻辑右移。但也有例外。

        符号-幅值表示法造成0的两种表现形式00000000和10000000。所以2的补码表示法克服这一缺点01111111代表127 ,10000000代表-128,10000001代表-127,11111111代表-1。

        浮点表示法和定点表示法的最大区别在于它的小数点是非固定的。一个整数值乘以2,就相当于它的二进制形式向左移动1位。当1个浮点数乘以2时,就相当于它的指数加1!32位的单精度和64位的双精度,它们的指数字段分别是8为和11位。对于32位单精度来讲,1位符号位,8位指数位,23位有效数。指数位为偏值的,表示-127到128.

float就是32为单精度的,double为双精度的。double为1位符号为,11位指数位,52位有效位。

        简单的二进制之所以能够被计算机识别并加区分,是因为计算机定义了一种编码方式,并通过各种编码方式来规定各种类型数值如何被表示。

        ASCII码适用于所有拉丁文字,它用7位二进制数进行编码,可以表示128个字符;第0-32号及第127号(共34个)是控制字符或通信专用字符。如LF(换行)----0x0a  ‘\n’ ,CR(回车)----0x0d   '\r' ,FF(换页),DEL(删除)----0x7F   ,BELL(振铃)-----0x07   ‘\a’   。

        奇校验规定 如果一个字节的编码序列中1个个数如果是奇数,那么校验位就置1;如果序列中1的个数是偶数,那么校验位就置0。偶校验规则刚好与其他相反。ASCII的最高位没用上,所以有了ASCII扩展码,值为128-255。扩展码用以存放英文的制表符、部分音标字符及其他符号。

        对于汉子编码方式规定:对于连续的两个字节,只有在两个字节的第7位都是1的情况下,才认为两个字节合起来表示一个汉子。GB2312包含了6000多个汉字,此外还收录了常见的数学符号、罗马和希腊的字母、日文的假名等。GB2312还为原来在ASCII码里的数字、标点、字母重新编排了一个有两个字节长的编码(这就是常说的“全角”字符,而原来的ASCII吗就叫做“半角”字符。)GB2312后来又扩展成GBK(国标扩展码)、甚至GB18030.此外,不同的国家和地区都制订了不同的编码标准,如BIG5,JIS等编码。不同的编码互不兼容,当信息在国际间交流时,无法将属于两种语言的文字存储在同一段编码的文本中,Unicode由此浮出水面。

        Unicode对各种语言中每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换处理的要求。GBK码与Unicode码之间转换通过查表来完成。

        C语言的数据类型为4钟  基本类型(整形 字符型  浮点型  枚举型)、指针类型、构造类型(数组型、结构体型、共有体型)、空类型。

        理解数据的存储形式和存在状态是理解计算机系统的重要一步。

        C语言标准中并没有规定各种不同的整形数据在内存中所占的字节数,而只是简单地要求长整型数据的长度应不短于基本整形,而短整型数据的长度要不长于基本整形即可。因此不同的编译器和计算机系统中的具体实现形式也不统一。

        因为浮点数在计算机内表示的是近似值。比如1.2的浮点数表示为1.20000004768372。因为要永远不要比较两个浮点数是否相等。这儿不是说大于和小于奥。可以用函数完成近似相等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值