深入理解计算机系统----读书笔记

第二部分

   信息的表示和处理

 

信息存储:

   二进制(0101001), 八进制,十六进制(0x32FD)

  (word size)指明整数和指针数据的标称大小(normal size),对于w位的机器而言,虚拟地址范围0-2w-1,

如32位机器最大寻址为4GB,无符号整数表示0-42亿

  数据大小 根据数据类型(int float bool等)

  寻址和字节顺序 大端小端的问题(两种表示方法,在网络通讯的时候可能会产生问题,需要注意)

无标题

大端:最高有效位字节在前面

小端:最低有效位字节在前面

下图所示为小端表示机器显示结果(-12345的补码表示 0xCFC7)

无标题2

 

 

布尔代数和布尔环

当考虑长度为w的位向量上的^,&和~运算时,会得到一种不同的数学形式,我们称之为布尔环( Boolean ring)

布尔环与整数运算有很多相同的属性。 如 整数运算的一个属性是每个值x都有一个加法逆元(additive inverse)-x

使得x+(-x) = 0。  布尔环的的“加法”是^(异或),即 a^a = 0;

因此 (a^b)^a= b  固有一下的代码:

void inplace_swap(int* x, int* y){*y = *x ^ *y; // x =x , y = x ^ y    *x = *x ^ *y; //x  = x ^(x^y) = y, y = x ^ y*y = *x ^ *y; //y = y ^ (x ^ y) = x ,
}

 

以下代码可能会出现的问题:数组个数为奇数时,中间一位的数字变为0,奇数时正常逆序

void reverse_array(int a[],int cnt){int first, last;for(first = 0,last = cnt - 1; first <= last; first++,last--)inplace_swap(&a[first],&a[last]);        
}

原因: 因为奇数时中间一位 调用inplace_swap()函数,a^a = 0;

修改方法: 1、在inplace_swap()前加上 if( first != last)判断, ps: 后来看答案是 first< last,这种改法更合理

                2、修改inplace_swap()函数

 

C语言中的移位运算:

逻辑右移:在左端补k个0

算术右移:在左端补k个最高有效位的值(最有符号数据的运算非常有用

  小结:  无符号数逻辑右移和算术右移的位表示是一样的,

             有符号数则不一样(有符号数采用补码表示),几乎所有的编译器/机器组合都对有符号数采用算术右移,程序员都    假设是机器会使用算术右移。

ps: 左移 =* 2n  右移  =/2n

      移位运算优先级较低,低于加减  如果不清楚就增加括号,  如 1 << 2 + 3 <<  4 实际意义: 1 << 5 << 4

 

 

有符号数与无符号数之间的转换:

       Ps: 一般机器有符号数都用补码表示(但不是标准和原则)

要点:

   1、C语言运行无符号数和有符号数转换,转换的原则是位表示保持不变

   2、将无符号数扩展成更大的数据类型,在表示的开头加0,称为零扩展

   3、将一个数的补码转换为一个更大的数据类型可以执行符号扩展添加最高有效位的值的副本

//数据转换 扩展short sx = -12345;unsigned short usx = sx; //53191int x = sx;unsigned int ux = usx;printf("sx = %d\t",sx);show_bytes((byte_pointer)&sx,sizeof(short));printf("usx = %u\t",usx);show_bytes((byte_pointer)&usx,sizeof(unsigned short));printf("x = %d\t",x);show_bytes((byte_pointer)&x,sizeof(int));printf("ux = %u\t",ux);show_bytes((byte_pointer)&ux,sizeof(unsigned));

结果如下:

无标题2

转载于:https://www.cnblogs.com/jackStudy/p/4798763.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FiddlerScript-常用总结

没有用过Fiddler的人应该对FiddlerScript没啥感触&#xff0c;我是真心觉得FiddlerScript对测试有一定的帮助哈。在web前端开发过程中&#xff0c;Fiddler是最常用的一款调试工具&#xff0c;那对于测试来说&#xff0c;对测试来说也是一大利器。在大多数情况下&#xff0c;通过…

OpenStack-Zun 使用

Zun组件简介 Zun是Openstack中提供容器管理服务的组件&#xff0c;于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器&#xff0c;支持多种容器技术。Zun原来称为Higgins&#xff0c;后改名为Zun。 Zun计划支持多种容器技术&#xff0c;Docker&#xff0…

【优雅代码】深入浅出 妙用Javascript中apply、call、bind

这篇文章实在是很难下笔&#xff0c;因为网上相关文章不胜枚举。 巧合的是前些天看到阮老师的一篇文章的一句话&#xff1a; “对我来说&#xff0c;博客首先是一种知识管理工具&#xff0c;其次才是传播工具。我的技术文章&#xff0c;主要用来整理我还不懂的知识。我只写那些…

PHP笔记随笔

1.CSS控制页面文字不能复制&#xff1a; body{-webkit-user-select:none;} 2.【php过滤汉字和非汉字】 $sc"aaad....##--__i汉字过滤"; //iconv("UTF-8","GB2312",$sc);utf-8转码 echo $temperegi_replace("[^\x80-\xff]",""…

qt linux 添加库文件路径,Linux下Qt调用共享库文件.so

jvm--4垃圾收集6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...GET和POSTAjax与Comet 1. Ajax Asynchronous Javascriptxml :能够向服…

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一、总结 一句话总结&#xff1a;两者都是对表单进行序列化&#xff0c;serializeArray()返回的是json对象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起来都是一样的 1、$&#x…

HDU 2842 Chinese Rings(矩阵高速功率+递归)

职务地址&#xff1a;HDU 2842 这个游戏是一个九连环的游戏。 如果当前要卸下前n个环。由于要满足前n-2个都卸下&#xff0c;所以要先把前n-2个卸下。须要f(n-2)次。然后把第n个卸下须要1次&#xff0c;然后这时候要卸下第n-1个。然后此时前n-2个都已经被卸下了。这时候把前n-2…

硬链接与软连接

linux系统硬链接和软连接&#xff1a; 1文件都由文件名和数据组成&#xff0c;在linux中文件被分为两个部分&#xff1a;用户数据和元数据。用户数据&#xff1a;即文件数据块&#xff0c;记录真实数据的地方。元数据&#xff1a;文件的附加属性&#xff0c;记录文件的大小&…

linux 7.2中文命令,CentOS7如何支持中文显示

1.查看系统是否安装有中文语言包locale -a | grep "zh_CN" 命令含义&#xff1a;列出所有可用的公共语言环境的名称&#xff0c;包含有"zh_CN"若出现图中所示几项&#xff0c;那么说明系统中已经安装了语言包&#xff0c;不需要在安装。含义是&#xff1a;…

html-拖拽

html-拖拽(draggable"true")拖拽的7个事件&#xff1a;> 拖拽块.οndragstartfunction(){console.log("拖拽开始")&#xff1b;}> 拖拽块.οndragfunction(){console.log("拖拽中")&#xff1b;}> 拖拽块.οndragendfunction(){console…

大道至简

道在中国哲学中&#xff0c;是一个重要的概念&#xff0c;表示“终极真理”。此一概念&#xff0c;不单为哲学流派诸子百家所重视&#xff0c;也被宗教流派道教等所使用。大道至简是指大道理&#xff08;基本原理、方法和规律&#xff09;是极其简单的&#xff0c;简单到一两句…

别人7天乐,运维还苦逼值班?

你被点名值班了吗&#xff1f;或者你的朋友、隔壁七大姑八大姨的侄子被点名值班了吗&#xff1f; 国庆将至&#xff0c;大家都开始研究各种度假攻略了&#xff0c;国内游、国外游、地球游、外星游。。。然而总有一票人&#xff0c;默默地职守着 -- tIT 公司运营支撑组/运维组。…

【常用损失函数】

一、Smooth L1 Loss 1.公式&#xff1a; 2.原因&#xff1a; L1损失使权值稀疏但是导数不连续&#xff0c;L2损失导数连续可以防止过拟合但对噪声不够鲁棒&#xff0c;分段结合两者优势。 二、Focal Loss 1.公式&#xff1a; 2.作用&#xff1a; 使得正负样本平衡的同时&#x…

ORA-01940: cannot drop a user that is currently connected解决方法

我们在删除数据库用户时候会碰到如下错误 SQL> DROP USER sys_xj cascade; DROP USER sys_xj cascade*ERROR at line 1:ORA-01940: cannot drop a user that is currently connected 解决方法&#xff1a; 1.查询出还在连接的此用户会话进程 SQL> SELECT SID,SERIAL# FR…

实现对象克隆

实现Serializable接口&#xff0c;通过对象的序列化和反序列化实现克隆&#xff0c;可以实现真正的深度克隆&#xff0c;代码如下 package com.lovo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; i…

linux 读取内存颗粒,linux查看主板内存槽与内存信息的命令dmidecode怎么用

在Linux中&#xff0c;我们常常使用命令来实现许多操作&#xff0c;比如查看内存信息等&#xff0c;下面小编就为大家带来一篇linux查看主板内存槽与内存信息的命令dmidecode方法。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来…

python 图像处理(从安装Pillow开始)

python 图像处理(从安装Pillow开始) python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library))&#xff0c;最新版本是 1.1.7 可在http://www.pythonware.com/products/pil/index.htm 下载和学习。 不过从该网站可看出它不支持python3.x Pillow由PIL而来(支持3.x)&…

手机还是不要随便更新的好

新入mate9pro 不到一个月&#xff0c;手贱升级了系统版本&#xff0c;出现导航搜索不到卫星的情况&#xff0c;软件下载了高德地图、腾讯地图、百度地图&#xff0c;逐一卸载安装重试&#xff0c;没一个能成功的&#xff0c;后来又下载了专业搜星软件&#xff0c;还是搜不到卫星…

Java对象容器——List

为什么80%的码农都做不了架构师&#xff1f;>>> 在Java中&#xff0c;我们可以用数组来存放同类型的变量或对象&#xff0c;但是数组有一个缺陷&#xff0c;它的长度不可变&#xff0c;必须在定义时给定其长度&#xff0c;所以说在一些场合下不适用。例如我们要存放…

STL学习笔记(数值算法)

运用数值算法之前必须先加入头文件<numeric> 加工运算后产生结果 1.对序列进行某种运算 T accumulate(InputIterator beg,InputIterator end, T initValue) T accumulate(InputIterator beg,InputIterator end, T initValue,BinaryFunc op) 1.第一种形式计算InitValue和…