信息的表示和处理

P20

无符号数:编码基于传统的二进制表示法(大于或者等于零的数字)。

补码:编码是表示有符号整数的最常见方式(为正或者为负的数字)。

浮点数:编码是表示实数的科学记数法的以二为基数的版本。

整数的表示虽然只能编码一个相对较小的数值范围,但是是精确的;而浮点数虽然可以编码一个较大的数值范围,但是这种表示是近似的表示。

大量的计算机安全漏洞都是由于计算机运算的微妙细节引发的。

P22

计算机使用大多数使用8位的块,或者字节,作为最小的可寻址的储存单位,而不是在存储器中访问单独的位。

十六进制表示法:

拿二进制作中间结果。

字:

每台计算机都有字长,指明整数和指针的标称大小。

字节决定的最重要的系统参数就是虚拟地址空间的最大大小。

对于一个字长为w的机器而言,虚拟地址范围0~2*(w-1),程序最多访问2*w个字节(常见w=32或者64)

数据大小:

计算机和编译器支持多种不同编码的数字格式,比如整数和浮点数,以及其他长度的数字。比如,许多机器都有处理单个字节的指令,也有处理表示为2字节或者4字节或者8字节的整数指令,还有些指令支持表示为4字节和8字节的浮点数。

gcc-m32可以在64位机上生成32位的代码。

P26

寻址和字节顺序:

对于跨越字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何安排这字节。

字节的顺序是网络编程的基础,小端是:“高对高,低对低”,大端与之相反。

P28

P32

逻辑运算(结果是0或者1):

与:&&

或:||

非:!

1表示TURE  0表示FALSE

位运算(结果是位向量):

与: &

或: |

非: ~

异或:^

按位进行运算

P33

    掩码是位运算的重要应用,位特定位可以置零或者置一(用来选择性屏蔽信号)

P38

整型数据类型:

表示有限范围的整数。

每种类型都能用关键字来指定大小,包括char或者short或者long或者 long long ,同时还可以指定是非负数(unsigned)或者可能是负数(默认)。

这些不同大小的分配的字数会根据机器的字长和编译器有所不同。

要用C99中的“long long”类型。编译是要用gcc-std=C99

P39

无符号数的编码:

对于每一个长度为w的位向量,都有一个唯一的值与之对应;反过来,在0~2*w-1之间的每一个整数都有唯一的长度为w的位向量二进制与之对应。

补码编码:

对于每一个长度为w的位向量,都有一个唯一的值与之对应;反过来,每个介于在-2*(w-1)和2*(w-1)-1之间的每整数都有唯一的长度为w的位向量二进制与之对应。

P44

有符号跟无符号的转换:

有符号和无符号的规则,位向量不变

位+上下文

P48

    计算机的负数是对应正数的取反+1

P49

0扩展:

将一个无符号数转换为一个更大的数据类型,我们只需要简单地在表示的开头添加0

符号扩展:

将一个补码数字转换为一个更大的数据类型,规则是在表示中添加最高位的有效位的副本

P52

     就像我们看到的,有符号数到无符号数的隐式强制类型转换导致了某些非直观的行为。而这些非直观的特性经常导致程序错误,并且这种包含隐式强制类型转换细微的差别错误很难被我们发现,因为这种强制类型的转换是代码中没有明确指示的情况下发生的。

如练习题2.25

length作为一个无符号数来传递很自然,i<=length-1也很自然,但是组合到一起,代码将试图访问数组a的非法元素。

P54

溢出:

在无符号算术运算中,没有所谓的“溢出”一说:所有的无符号运算都是以2的n次方为模,这里的n是结果中的位数。如果算术运算符的一个操作数为有符号整数,另一个为无符号整数,那么有符号整数会被转换成无符号整数,“溢出”也不可能发生。但是,当两个操作数都是有符号数时,溢出就有可能发生,而且溢出的结果是未定义的。当一个运算的结果发生溢出时,做出任何假设都是不安全的。

避免:

一个正确的方法是依赖于无符号算术的良好定义,即要在有符号和无符号之间进行转换:

【摘自:http://blog.csdn.net/milan25429688/article/details/328944#4.8

P67

关于整数运算的最后的思考:

计算机执行的整数的运算其实是一种模运算的形式

无论运算数是以无符号形式还是以补码的形式的表示的,都有完全一样或者非常类似的位级行为

浮点数:

浮点表示对如V=xX2*y的有理数进行编码

它对执行涉及非常大的数字(|V|>>0)非常接近于0(|V|<<1)的数字,以及更普遍地作为实数运算的近似值的计算,都是很有用的

浮点数有科学的计算基础就很好理解,IEEE标准

P68

IEEE   :

Institute of Electrical and Electronics Engineers (IEEE) 美国电气和电子工程师协会

IEEE被国际标准化组织授权为可以制定标准的组织,设有专门的标准工作委员会,有30000义务工作者参与标准的研究和制定工作,每年制定和修订800多个技术标准。

IEEE的标准制定内容有:电气与电子设备、试验方法、原器件、符号、定义以及测试方法等。

浮点数运算的不确定性与舍入:

 1.向偶舍入

2.向零舍入

3.向下舍入

4.向上舍入

P70

IEEE浮点标准用V=(-1)*s XMX 2*E  来表示一个数:

符号:s决定这个数是负数(s=0)还是正数(s=1)。而对于0的符号位特殊情况处理。

尾数:M是一个二进制小数,范围为1~2-ε或者0~1-ε(ε=1/2的n次幂)

阶码:E对浮点数加权,权重是2的E次幂(可能为负数)

编码规则:

float:

s字段为1位,exp字段为k=8位,frac字段为n=23位,得到一个32位的表示。

double:

s字段为1位,exp字段为k=11位,frac字段为n=52位,得到一个64位的表示。

P74 

明白整数与浮点数的转换规则

IEEE 754对有效数字M和指数E还有一些特别规定:

(1)E不全为0或不全为1:
这时浮点数就采用上面的规则表示即指数E的计算值减去127(或1023)得到真实值再将有效数字M前加上第一位的1。

(2)E全为0:
这时浮点数的指数E等于1-127(或者1-1023)有效数字M不再加上第一位的1而是还原为0.xxxxxx的小数。这样做是为了表示±0
以及接近于0的很小的数字。

(3)E全为1:
这时如果有效数字M全为0表示±无穷大(正负取决于符号位s)如果有效数字M不全为0表示这个数不是一个数(NaN)。

小结:

   在相同长度的无符号和有符号的整数之间进行强制类型的转换时,大多数的C语言实现遵守的原则是底层的位模式不变。在补码的机器上,对于一个w位的值,这种行为是由函数T2Uw和函数U2Tw来描述的。C语言隐式的强制类型的转换会出现许多程序员无法预计的结果,常常导致程序出出现错误。

由于编码长度有限,与传统整数和实数的运算相比,计算机运算具有完全不同的属性。当超过表示的范围时,有限长度能够引起数值的溢出。

我们必须非常小心的使用浮点运算,因为浮点运算只有有限的范围和精度,而且不遵守普通的算术属性,比如结合性。

时间: 2024-10-10 05:27:02

信息的表示和处理的相关文章

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

查看Linux系统版本信息

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

java微信授权获取OPENID,ACCESS_TOKEN,用户信息

获取微信的openId流程 1.获取微信code 使用接口 : appId 是当前开发者的appId 不是用户的  path  是回调地址 这个链接是授权链接,当重定向这个链接的时候,会展示授权页,点击授权之后 跳入你path的请求接口    回调中带了一个参数code获取到就行 https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+path+"&

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

调试信息的完成

gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader 引导的. EBX: 必须包含boot loader 提供的多重引导信息结构(见3.3 节多重信息引导结构)的32位物理地址. CS: 必须是32 位的读/执行的代码段,偏移是0 以及界限是 0X

20145225 《信息安全系统设计基础》期中总结

期中总结 一.常用命令总结 man -k: 常用来搜索,结合管道使用.例句如下: man -k k1 | grep k2 | grep 2 搜索同时含有k1和k2,且属于系统调用. 最后的数字意味着帮助手册中的区段,man手册共有8个区段,最常用的是123,含义如下: 1.Linux 2.系统调用 3.c语言 但是当单独用man语句的时候,想查看其中的单独某个区段内的解释时,用法是这样的: man 3 printf 即查找c语言中printf的用法. grep -nr 这条语句可以用来查找关键字

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

20145317《信息安全系统设计基础》第六周学习总结(1)

20145317<信息安全系统设计基础>第六周学习总结(1) 第四章 处理器体系结构 指令体系结构:一个处理器支持的指令和指令的字节级编码 4.1Y86指令集体系结构 Y86:包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. Y86程序中的每条指令都会读取或修改处理器状态的某些部分.Y86具体包括:8个程序寄存器.3个条件码ZF\SF\OF.程序计数器(PC) Y86用虚拟地址引用存储器位置. 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态. 注意:条件

20145239 《信息安全系统设计基础》第5周学习总结

20145239<信息安全系统设计基础>第5周学习总结 教材学习内容 x86寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 8086的分段模式 IA32的带保护模式的平坦模式 机器级编程的两种抽象 -ISA(Instruction set architecture).ISA简单来说就是指令集体系结构.定义了处理机状态,指令格式以及指令对状态的影响.-机器级使用的存储器地址是虚拟地址. 机器代码中的处理机状态 程序计数器(PC)表示将要执行的下一条指令在存储器中的地址. 整数