Skip to content

Commit

Permalink
add 运算
Browse files Browse the repository at this point in the history
  • Loading branch information
Jiewyjson committed Apr 28, 2023
1 parent ba8f390 commit f31b255
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 6 deletions.
50 changes: 50 additions & 0 deletions book/2.信息的表示和处理.html
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,56 @@ <h3 id="截断"><a class="header" href="#截断">截断</a></h3>
<li>补码数的截断</li>
</ul>
<h3 id="运算"><a class="header" href="#运算">运算</a></h3>
<h4 id="整数"><a class="header" href="#整数">整数</a></h4>
<ul>
<li>加法
<ul>
<li>无符号加法
<ul>
<li>正常 <code>x+y</code></li>
<li>正溢出 <code>x+y-(1&lt;&lt;w)</code></li>
</ul>
</li>
<li>补码加法
<ul>
<li>正溢出 <code>x+y-(1&lt;&lt;w)</code></li>
<li>正常 <code>x+y</code></li>
<li>负溢出 <code>x+y+(1&lt;&lt;w)</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>检测无符号溢出:如果x+y的结果s&lt;x||s&lt;y</p>
<p>检测补码溢出:</p>
<p>​ 1.正溢出,x&gt;0,y&gt;0但x+y的结果s&lt;=0; </p>
<p>​ 2.负溢出:x&lt;0,y&lt;0但s&gt;=0。</p>
</blockquote>
<blockquote>
<p>计算位级补码的非表示</p>
<p>一: 对每一位求补,再对结果+1</p>
<p>二: 设存在一位k(k是下标),k是最右边<code>1</code> 的位置,对k左边的所有位取反.</p>
</blockquote>
<ul>
<li>乘法
<ul>
<li>无符号乘法: <code>(x*y)mod (1&lt;&lt;w)</code></li>
<li>补码乘法:
<ul>
<li>首先跟无符号乘法一样先取模,然后计算无符号转换补码</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>2的幂:</p>
<p><code>1&lt;&lt;k</code>: 表示<code>* 2的k次幂 </code></p>
<p><code>1&gt;&gt;k</code>: 表示<code>/ 2的k次幂</code></p>
</blockquote>
<p>无符号运算和补码运算乘以2的幂都可能会溢出,但是即便溢出,通过移位得到的结果是一样的。如<code>11</code> 的二进制4位<code>[1011]</code>,<code>11&lt;&lt;2=44</code>,即<code>[101100]</code>截断为4位<code>[1100]</code>十进制为<code>12</code>==<code>44 mod 16</code></p>
<h4 id="浮点数"><a class="header" href="#浮点数">浮点数</a></h4>

</main>

Expand Down
2 changes: 1 addition & 1 deletion book/searchindex.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion book/searchindex.json

Large diffs are not rendered by default.

44 changes: 40 additions & 4 deletions book/命令.html
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,8 @@ <h1 class="menu-title">cs_learn</h1>
<div class="sidetoc"><nav class="pagetoc"></nav></div>

<h1 id="常用命令"><a class="header" href="#常用命令">常用命令</a></h1>
<h2 id="ls-列出文件和目录"><a class="header" href="#ls-列出文件和目录">ls ——列出文件和目录</a></h2>
<h2 id="文件命令"><a class="header" href="#文件命令">文件命令</a></h2>
<h3 id="ls-列出文件和目录"><a class="header" href="#ls-列出文件和目录">ls ——列出文件和目录</a></h3>
<ol>
<li>ls 显示当前目录下的文件和目录</li>
<li>ls -F 区分文件和目录</li>
Expand All @@ -153,12 +154,12 @@ <h2 id="ls-列出文件和目录"><a class="header" href="#ls-列出文件和目
<li>ls -ld filename 查看单个文件的长列表</li>
<li>标准通配符(? or *)进行模糊匹配</li>
</ol>
<h2 id="处理文件"><a class="header" href="#处理文件">处理文件</a></h2>
<h3 id="处理文件"><a class="header" href="#处理文件">处理文件</a></h3>
<ol>
<li>touch filename 创建一个名叫<filename><strong></strong>文件</li>
<li>cp source destination 把源文件复制到目标对象(当<code>source</code><code>destinayion</code> 都是文件名是,会将源文件复制成一个新的目标文件,且命名为<code>destination</code> )在目标文件的尾部加上”/”. cp -R 会把整个源文件的所有文件都复制到目标文件中</li>
</ol>
<h2 id="链接文件"><a class="header" href="#链接文件">链接文件</a></h2>
<h3 id="链接文件"><a class="header" href="#链接文件">链接文件</a></h3>
<ol>
<li>
<p>符号链接</p>
Expand All @@ -173,7 +174,42 @@ <h2 id="链接文件"><a class="header" href="#链接文件">链接文件</a></h
</li>
</ol>
<p><strong>硬链接只能对同一存储设备的文件建立链接,软连接则可以在不同设备的文件之间建立链接。</strong></p>
<h2 id="重命名文件"><a class="header" href="#重命名文件">重命名文件</a></h2>
<h3 id="重命名文件"><a class="header" href="#重命名文件">重命名文件</a></h3>
<blockquote>
<p>又叫<strong>移动文件</strong></p>
</blockquote>
<p><code>mv</code>可以将文件从一个地方移动到另一个地方,并且不改变文件的<code>inode</code>编号和时间戳</p>
<p>可搭配<code>-i</code> 选项,在试图覆盖已有文件时发出询问.</p>
<p>删除文件</p>
<p><code>rm</code>,可以搭配<code>-i</code> 进行询问;<code>-f</code> 强制删除.</p>
<p>创建目录</p>
<p><code>mkdir</code></p>
<blockquote>
<p>批量创建:<code>mkdir -p</code></p>
</blockquote>
<p>删除目录</p>
<p><code>rmdir</code></p>
<blockquote>
<p>默认情况下,<code>rmdir</code> 是删除空目录.但是可以使用<code>rm -rf</code>:<code>-r</code> 可以向下进入删除目录中的文件并且删除自身,<code>-f</code> :强制删除.</p>
</blockquote>
<h3 id="查看文件类型"><a class="header" href="#查看文件类型">查看文件类型</a></h3>
<p><code>file</code> :可以探测文件的内部并且返回文件类型</p>
<h3 id="查看整个文件"><a class="header" href="#查看整个文件">查看整个文件</a></h3>
<ul>
<li>cat:查看文本内容;选项:<code>-n</code> 加上行号</li>
<li>more:显示文本文件的内容,并且会在每页数据显示完之后暂停.</li>
<li>less:<code>more</code>的升级版,附加的功能:
<ul>
<li>可以识别上下箭头和上下翻页键</li>
</ul>
</li>
</ul>
<h3 id="查看部分文件"><a class="header" href="#查看部分文件">查看部分文件</a></h3>
<ul>
<li>tail:默认情况下显示文本的末尾10行;可配合<code>-n</code> +数字来显示文本的最后几行。<code>-f</code>允许在其他进程使用此文件时查看文件内容。</li>
<li>head:默认情况下显示文本的前10行;同理可以配合<code>-n</code></li>
</ul>
<h3 id=""><a class="header" href="#"></a></h3>

</main>

Expand Down
50 changes: 50 additions & 0 deletions src/2.信息的表示和处理.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,53 @@

### 运算

#### 整数

- 加法
- 无符号加法
- 正常 `x+y`
- 正溢出 `x+y-(1<<w)`
- 补码加法
- 正溢出 `x+y-(1<<w)`
- 正常 `x+y`
- 负溢出 `x+y+(1<<w)`

> 检测无符号溢出:如果x+y的结果s<x||s<y
>
> 检测补码溢出:
>
> ​ 1.正溢出,x>0,y>0但x+y的结果s<=0;
>
> ​ 2.负溢出:x<0,y<0但s>=0。


> 计算位级补码的非表示
>
> 一: 对每一位求补,再对结果+1
>
> 二: 设存在一位k(k是下标),k是最右边`1` 的位置,对k左边的所有位取反.


- 乘法
- 无符号乘法: `(x*y)mod (1<<w)`
- 补码乘法:
- 首先跟无符号乘法一样先取模,然后计算无符号转换补码

> 2的幂:
>
> `1<<k`: 表示`* 2的k次幂 `
>
> `1>>k`: 表示`/ 2的k次幂`
无符号运算和补码运算乘以2的幂都可能会溢出,但是即便溢出,通过移位得到的结果是一样的。如`11` 的二进制4位`[1011]`,`11<<2=44`,即`[101100]`截断为4位`[1100]`十进制为`12`==`44 mod 16`







#### 浮点数

0 comments on commit f31b255

Please sign in to comment.