三种数字表示

无符号数:

基于传统的二进制表示法,表示大于或者等于零的数字。

补码(有符号数):

表示有符号数整数的最常见的方式,有符号数就是只可

以为正或者为负的数。

浮点数:

表示实数的科学计数法的以二为基数的版本。

进制转换

      以二进制和十进制为桥梁进行转换

0x与0X用来表示十六进制

字长指明整数和指针数据的标称大小,决定虚拟地址空间的最大大小。       对于一个字长为w位的机器,虚拟地址的范围为0 ~2^w - 1,程序最多访问2^w个字节。

数据大小

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

c语言中数字数据类型的字节数

C声明

32位机器

64位机器

Char

1

1

Short int 

2

2

Int

4

4

Long int

4

8

Long long int

8

8

Char*

4

8

Float

4

4

Double

8

8

寻址和字节顺序

小端法
       在存储器中按照从最低有效字节到最高有效字节的顺序存储对象。
大端法
       从最高有效字节到最低有效字节的顺序存储。
(小端法:高对高,低对低。大端法:高对低,低对高。)
书28页代码

 
 表示字符串

ASCⅡ字符码

a-z的ASC||码为0x61-0x7A。

表示代码

二进制代码是不兼容的。

布尔代数

二进制值是计算机编码、存储、操作信息的核心(0、1)

逻辑运算——0或1

位运算————位向量

~=NOT

&=AND

|=OR

^=异或

*位向量:有固定长度为w,由0、1组成的串。每个对应元素之间的运算。 掩码。通过指定一个位向量掩码,有选择的使能或不能屏蔽一些信号。(0表示被屏蔽)

C语言中的位级运算

|是OR(或)

&是AND(与)

~是NOT(取反)

^是EXCLUSIVE-OR(异或)

确定一个位级表达式的结果最好的方法,就是将十六进制的参数扩展成二进制标识并执行二进制运算,然后再转换回十六进制。

C语言中的逻辑运算

|| OR

&& AND

! NOT

所有非零的参数表示TRUE

参数0表示FALSE

它们返回1或者0,分别表示结果为TRUE或FALSE

C语言中的移位运算

1.左移(x<<k) x向左移动k位,丢弃最高的k位,并在右端补k个0

2.右移(x>>k) 逻辑右移:x向右移动k位,丢弃最高的k位,并在左端补k个0.

算术右移:x向右移动k位,丢弃最高的k位,并在左端补k个最高有效为的值。

对于无符号数据,右移必须是逻辑的。对于有符号数,算术或逻辑右移均可以。

整数的表示

具体数据类型的表示范围在教材P38

要用C99中的"long long"类型,编译要用gcc -std=c99

无符号数的编码:

数据类型long long是在ISO C99中引入的。(编译:gcc -std=c99)。

64位机器用8个字节表示;32位机器用4个字节表示。

*负数的范围比整数的范围大1。

补码编码:

最常见的有符号数的计算机表示方式。

正数的补码=原码

负数的补码=原码各位取反再加1

最高有效位也叫符号位。

补码的范围是不对称的:|TMin| = |TMax| + 1,也就是说,TMin没有

与之对应的正数。

补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,12-1
等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器
就可以实现所有的数学运算。(应正确理解补码)

有符号数和无符号数之间的转换

强制类型转换的结果保持位值不变,改变解释这些位的方式。 处理同样字长的有、无符号数之间相互转换的规则:数值可能会变,但是位模式不变。

(底层的位表示保持不变) 无————>有:U2Tw函数 有————>无:T2Uw函数

有符号数与无符号数之间的转换,都要看要转换的数的最高位是否为1,如果不为1,则转换结果就是要转换的数的本身;

如果为1,则转换结果就是转换的数(看作是负数)的补码。

C语言中的有符号数与无符号数

当C语言对同时包含有符号和无符号数表达式执行运算时,会将有符号数强制转换为无符号数,再进行运算。

扩展一个数字的位表示

零扩展

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

符号扩展:

将一个补码数字转换为一个更大的数据类型可以执行符号扩展(sign extension),规则是在表示中添加最高有效位的值的副本。

 
 

整数运算

无符号加法

         w表示最大表示位,当x+y>2^w-1,其和溢出
补码加法

补码的非


无符号乘法

w位无符号乘法运算* wu的结果为:

补码乘法

C语言中的有符号乘法是通过将2^w位的乘积截断为w位的方式实现的。

根据等式,w位的补码乘法运算* wt的结果为:


除以2的幂

无符号数除以2的幂
	x>>k等价于x/(2^k)
 
有符号数除以2的幂
	1.非负数同无符号数
	2.x>>k(算术右移),结果同除以2的幂几乎完全一样


浮点数
1.二进制小数
	定点表示法:“.”为界(不能有效的表示很大的数)
十进制
	小数点左边的数字的权是10的非负幂,得到整数值;右边的数字的权是10的负幂,得到小数值。
二进制
	小数点左边的数字的权是2的非负幂,右边的数字的权是2的负幂。
2.IEEE浮点表示
1.用V = (-1)s * M * 2E的形式来表示一个数:
符号
	s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
尾数
	M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。 
阶码
	E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。
2.将浮点数的位表示划分为三个字段,分别对这些值进行编码:
	一个单独的符号位s直接编码符号s。
	k位的阶码字段exp = ek-1…e1e0编码阶码E。
	n位小数字段frac = fn-1…f1f0编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。
3.两种常见的格式
	C语言中的单精度浮点格式float 和双精度浮点格式double。
	在float中,s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示;
	在double中,s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示。


遇到的问题

1.IEEE浮点表示方法由于第一次接触,明显觉得很难理解.记忆 2.在做第28页习题是,感觉gcc及 gdb运用很生涩浪费了很多时间

Linux(9.28-10.4)学习笔记的更多相关文章

  1. linux内核分析第四周学习笔记

    linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  2. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  3. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  5. Linux简易APR内存池学习笔记(带源码和实例)

    先给个内存池的实现代码,里面带有个应用小例子和画的流程图,方便了解运行原理,代码 GCC 编译可用.可以自己上网下APR源码,参考代码下载链接: http://pan.baidu.com/s/1hq6 ...

  6. Linux文件与目录管理(学习笔记)

    本笔记为<鸟哥linux私房菜>第六章学习笔记 一.目录与路径 相对路径与绝对路径 绝对路径:一定由根目录 / 写起              正确度比较好 相对路径:不是由 / 写起  ...

  7. Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)

    齿轮发出咔嚓一声,向前进了一格.而一旦向前迈进,齿轮就不能倒退了.这就是世界的规则. 0x01背景 造了个轮子:御剑师傅的ipintervalmerge的Python版本.觉得打印的提示信息如果是普通 ...

  8. 201521123003《Java程序设计》第10周学习笔记

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  9. Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  10. linux常用命令(个人学习笔记)

    个人说明:学习linux也有半年左右的时间了,从一开始的只会简单的开关机,到现在的熟悉应用一些简单的命令,还是有些进步的,不过对于我这种菜鸟来说,如果不经常用,发现忘的很快.所以就把在学习过程中遇到的 ...

随机推荐

  1. Maven学习遇到的第一个错误

    现在开始学习maven,我是在极客学院看的视频学习的,学习当然会遇到异常,下面是我遇到的第一个异常 [ERROR] Failed to execute goal org.apache.maven.pl ...

  2. 使用OLE DB读写Excel

    说明: 使用这种技术的好处是无需引用对象,坏处是无法处理类似合并单元格这样的复杂情况 一些更新: 为了使用Office 2010,需要安装Microsoft Access 2010 数据库引擎可再发行 ...

  3. System Center的一些资料收集

    MS 的 system center 中文首页 http://www.microsoft.com/zh-cn/server-cloud/system-center/default.aspx 英文首页 ...

  4. ms sql server 在abator生成的 insert 无法获取插入 id 的原因

    <insert id="abatorgenerated_insert" parameterClass="net.xxxxxl.dataobject.Users&qu ...

  5. maven 的 pom.xml 文件报错:ArtifactTransferException: Failure to transfer

    因为maven下载依赖jar包时,特别慢,所以取消了下载过程,再次打开eclipse时,maven的pom.xml文件报错如下: ArtifactTransferException: Failure ...

  6. 使用jsonp进行跨域访问

    一.使用场景 当我们请求非本服务器的资源的时候,浏览器会禁止访问,并提示不允许跨域访问.此时我们可以使用jsonp这种请求方式,从其他服务器获取资源.在客户端调用提供jsonp支持的接口,获取json ...

  7. poj 1050 To the Max(最大子矩阵之和,基础DP题)

    To the Max Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 38573Accepted: 20350 Descriptio ...

  8. 【ASP.NET 进阶】根据IP地址进行百度地图定位

    昨天有完成一个[ASP.NET 进阶]根据IP返回对应位置信息 的小Demo,既然可以通过IP获得位置信息,那当然可以通过位置信息的经纬度获取IP的当前定位了,虽然与实际地址偏移较大,毕竟不是GPRS ...

  9. 如何在ZBrush中添加毛发

    ZBrush不仅能雕刻出完美的头发造型,还能够应用真实的头发和毛发.在制作毛发之前只需要简单定义遮罩区域,包括长短.疏密.当然,最重要的是,你可以使用Polypaint生成各种有色纤维,这将非常方便. ...

  10. html5 实现video标签的自定义播放进度条

    现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: <!DOCTYPE html> <html lang=" ...