Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
编程进阶之路
计算机科学
提交
349f3ce1
计
计算机科学
项目概览
编程进阶之路
/
计算机科学
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
计
计算机科学
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
349f3ce1
编写于
9月 06, 2023
作者:
编程进阶之路
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
位操作示例:最低为的1 判断一个十六进制数是否为字母
上级
e3cdafe6
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
56 addition
and
2 deletion
+56
-2
assets/深入理解计算机系统(原书第3版)可编辑_1693568429838_0.edn
assets/深入理解计算机系统(原书第3版)可编辑_1693568429838_0.edn
+1
-1
code/CSAPP/Chapter02/LowBit.c
code/CSAPP/Chapter02/LowBit.c
+53
-0
pages/CC-Computer Composition.md
pages/CC-Computer Composition.md
+2
-1
未找到文件。
assets/深入理解计算机系统(原书第3版)可编辑_1693568429838_0.edn
浏览文件 @
349f3ce1
...
...
@@ -1942,4 +1942,4 @@
:page
478
}
,
:content
{
:text
"[:span]"
,
:image
1694001388059
}
,
:properties
{
:color
"purple"
}}]
,
:extra
{
:page
499
}}
:extra
{
:page
500
}}
code/CSAPP/Chapter02/LowBit.c
0 → 100644
浏览文件 @
349f3ce1
/*
位操作练习题
*/
#include <stdio.h>
#include <stdlib.h>
/*
* LowBit - return value of low-order 1 bit
* Examples: LowBit(0x1F) = 0x1
* LowBit(0x300) = 0x100
* LowBit(0x0) = 0x0
*/
unsigned
int
LowBit
(
unsigned
int
x
)
{
return
x
&
(
~
x
+
1
);
}
/*
* hexAllLetter - return 1 when all 4 hex digits are letters
* Examples: hexAllLetter(0x1234) = 0
* hexAllLetter(0x1ABF) = 0
* hexAllLetter(0xABCD) = 1
A hexadecimal number orresponding to the four binary number x3x2x1x0
Let's check whether the hexadecimal number is a letter
x3x2=00 x3x2=01 x3x2=10 x3x2=11
x1x0= 00 0 0 0 1
x1x0= 01 0 0 0 1
x1x0= 10 0 0 1 1
x1x0= 11 0 1 1 1
*/
unsigned
hexAllLetter
(
unsigned
x
)
{
// x3 x2 x1 x0 -> hex
// 0 0 1 0 -> hex constent 0x2
unsigned
x1
=
x
&
0x22222222
;
// ...xxxx0010
// 0 1 0 0 -> hex constent 0x4 // ...xxxx0100
unsigned
x2
=
x
&
0x44444444
;
// ...xxxx1000
// 1 0 0 0 -> hex constent 0x8
unsigned
x3
=
x
&
0x88888888
;
// ...xxx10000
// x3 * (x1 + x2) ==> x3 & (x1 + x2)
unsigned
a
=
(
x3
>>
3
)
&
((
x2
>>
2
)
|
(
x1
>>
1
));
return
a
;
}
int
main
()
{
printf
(
"%#x
\n
"
,
LowBit
(
0xf
));
// 0xf = 1111 -> 0x1
printf
(
"%#x, is letter %#x
\n
"
,
0xabcdefab
,
hexAllLetter
(
0xabcdefab
));
printf
(
"%#x, is letter %#x
\n
"
,
0x11111111
,
hexAllLetter
(
0x11111111
));
printf
(
"%#x, is letter %#x
\n
"
,
0xa0a0a0a0
,
hexAllLetter
(
0xa0a0a0a0
));
return
0
;
}
pages/CC-Computer Composition.md
浏览文件 @
349f3ce1
...
...
@@ -19,4 +19,5 @@
-
`[符号位(0, 1), 阶码(移码表示), 尾数]`
-
我们知道数据在计算机是如何表示的了,下面我们介绍指令和控制如何存储的 [[CC-程序的机器级表示]]
-
到目前为止,我们依赖于一个简单的计算机系统模型,CPU 执行指令,而存储期系统为 CPU 存放质量和数据。[[$green]]==在简单模型中,存储器系统是一个线性的字节数组==,而 CPU 能够在一个常数时间内访问每个存储期位置。[[$green]]==实际上,存储期系统是一个具有不同容量、成本和访问时间的存储设备的层次结构==。下面我们描述 [[CC-存储器层次结构]]
-
\ No newline at end of file
-
-
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录