信息的表示和处理(1)

2.1 信息存储

上一节我们说到计算机领域一个重要的抽象 --- 虚拟存储器, 其中每一个字节都有一个数字作为唯一的标识, 这也就是所谓的地址。所有的地址的集合叫做虚拟地址空间, 用来给机器程序一个统一的概念性映像。我们用它来完成对被划分给不同的程序对象的存储区空单元的管理。

2.11 十六进制表示法

hexadecimal常常用来表示字节, 在C语言中0x或者是0X开头表示这个数字常量是十六进制,从1到16分别是1-9a-f(大小写均可)。

作业比较简单都是一些关于进制转化的就不做了。

2.12 字

计算机的字长用来指明计算机整数和指针的normal size, 虚拟地址就是以字来编码的, 所以字长同时也决定了虚拟地址空间的最大大小,比如32位字长的计算机最大的虚拟地址空间是0-2^32-1也就是4GB。

2.13 数据大小

c语言中各类型的准确字节数其实取决于机器和编译器,程序员应该尽量使得所使用数据类型对于其字节数不敏感。

2.14 寻址和字节顺序

对于跨越多字节的程序对象, 我们可以通过两个重要的因素来确定他们, 一个是对象的地址(跟确切的说我感觉是指针, 因为还必须知道这个数据对象的具体类型), 另外一个是字节排列的顺序。

比如对于一个四字节整数而言,从高地址到低地址可以是【x3, x2, x1, x0 】此时x3是msb, 这就是所谓的小端, 它将最高有效位存放在高地址位。 而大端法则恰恰相反, 随着地址的减小位级却在不断增大(可以想象一下你要把一个字符串中保存的整数分析正整数--》“1234 ”, 1是msb, 但1处在低地址位)。

这里可以写一个简单的程序来测试自己的系统到底是小端还是大端。

printf("%x\n", (char)(0x1234));

理论上这一行代码就够了, 如果是小端的话输出结果应该是34。

2.15 表示字符串

最常见的字符编码是ascii字符码, 因为每一个字符都可以用单个字节表示, 所以ascii码不受字节顺序的影响, 这也是为什么文本数据比二进制数据具有更好的平台独立性。

2.16 表示代码

源代码本身作为文本文件是多平台的, 但是一旦编译之后生成了目标代码, 那么就失去了跨平台的能力, 因为不同平台的机器指令的编码方式不同。

2.17 布尔代数简介

布尔代数也就是关于0(false)和1(true)的一些运算, 比如 &  |  ~ ^等等。但是在实际的编程实践中, 这种正对单个0和1的逻辑运算是远远不够的, 所以人们将之扩展到位了位向量运算, 位向量就是有固定长度w, 由0和1组成的串(实际上就是提供了对于多位二进制数的运算支持)。

2.18 c语言中的位级运算

这里比较有意思的是我们可以利用异或 a^b^a = b 这一性质来完成两个变量的交换而不借用第三个变量。

x = x ^ y;

y = x ^ y;

x = x ^ y;

唯一的缺点是如果xy相等的话最终两个值都会变成0, 其实用加法也可以实现一样的效果并且避免这一缺陷。

x = x + y;

y = x – y;

x = x – y;

另外一个是2.13题中, 这道题首先应该把bis和 | 等价起来, 然后再把bic 和 x & (~y)等价起来, 之后我想的是如果要得到^直接 可以用 bic((0x11111111), bis(x, y)这个解决思路是有缺陷的, 就是只能在int为32位的机器上有效果, 其实更好的是 通过公式 x ^ y = (x & ~y ) | (~x & y) 得出 bis(bic(x, y ), bic(y, x))。

2.19 c语言中的逻辑运算

逻辑运算与位级运算的区别在于逻辑运算将所有非0的参数是为true, 其他视为false。 在c语言中操作符有 && || 和 !, 同时逻辑运算的短路遵循短路原则。 如 3 || 3 / 0,那么后面的3 / 0 是不会发生的。

如果只能用逻辑运算和位级运算等价表示x == y 的话, 可以这样写 !(x ^ y);

时间: 2024-12-14 05:08:21

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

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

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

查看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)表示将要执行的下一条指令在存储器中的地址. 整数