计算机基础大作业完整版Word文件下载.docx

上传人:b****2 文档编号:14105458 上传时间:2022-10-18 格式:DOCX 页数:26 大小:357.98KB
下载 相关 举报
计算机基础大作业完整版Word文件下载.docx_第1页
第1页 / 共26页
计算机基础大作业完整版Word文件下载.docx_第2页
第2页 / 共26页
计算机基础大作业完整版Word文件下载.docx_第3页
第3页 / 共26页
计算机基础大作业完整版Word文件下载.docx_第4页
第4页 / 共26页
计算机基础大作业完整版Word文件下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

计算机基础大作业完整版Word文件下载.docx

《计算机基础大作业完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机基础大作业完整版Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。

计算机基础大作业完整版Word文件下载.docx

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。

实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:

数据的表示实验学时:

2

同组学生姓名:

无实验地点:

实验日期:

实验成绩:

批改教师:

批改时间:

一、实验目的和要求

熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。

二、实验仪器和设备

硬件环境:

IA-32

软件环境:

Linux,C语言,gcc

三、实验内容与过程

1、实验内容

1.“-2<

2”和“-2<

2u”的结果一样吗为什么请编写程序验证。

2.运行下图中的程序代码,并对程序输出结果进行分析。

3.运行下列代码,并对输出结果进行分析。

#inelude<

>

voidmain()

{

unionNUM

inta;

charb[4];

}num;

=0x;

printf("

Ox%X\n"

[2]);

4.请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。

如果有warning信息的话,分析为何会出现这种warning信息。

inta=48;

intb=-48;

intc=49;

unsignedshortd=65539;

shorte=-32790;

5.编译运行以下程序,并至少重复运行3次。

voidmain()

doublex=,y=,z=;

for(inti=0;

i<

10;

i++){

if((y-x)==z)printf("

"

);

elseprintf("

notequal\n"

x+=z;

y+=z;

%d,%f,%f\n”i,,x,y);

}

要求:

(1)给出每次运行的结果截图。

(2)每次运行过程中,是否每一次循环中的判等结果都一致为什么

(3)每次运行过程中,每一次循环输出的i、x和y的结果分别是什么为什么

2、实验步骤

1.进入linux系统,在shell终端的提示符后输入gedit,编写C语言源程序。

gedit

输入实验内容1的源程序并以为文件名将文件存盘。

2.用GCC对源文件进行编译并产生目标文件,汇编语言程序。

gcc-s—

gcc-g-o

3.用GDB跟踪执行SAMPLE。

gdbSAMPLE

4.观察程序执行情况并记录运行结果。

5.依照上述四个步骤,完成对其余实验内容的操作。

四、实验结果与分析

•无知逗文档1-gedit

IB

譎*>

4>

J)lb:

SO蕊

»

tnclude<

stdto.h>

void

voidmain()

inta,c;

a=(-2<

2)1:

0;

c=(-2<

2u)1:

printf("

%d\n%d\n"

a,c);

ysc^ubuntu:

-/zuoyc

yscQubuntu;

cdzuoyeysc^ubuntur-/zuoye$gcc-o1l,cyscgubunt□:

-/zuoyeSJi

1

oy刍匚(dubuntj:

~/zuaye$|

正数的原码,反码,补码都一样。

而负数在计算机里是按补码存放和运算的。

-2在内存中的

存储方式为1111,1111,1111,1111,11111,11111,1111,1110B即fffffffeH,最高位为符号位,2在内存中的存储方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位为符号位,2u在内存中存储的方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位不再是符号位。

所以-2<

2是符号位的比较,即-2<

2是正确的。

-2<

2u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转无符号数,所以

-2=2。

2,是有符号数的比较,即2+(-2)=fffffffeH+fffffffeHRFFFFFFFCH=[-4补,最高位

符号位溢出,所以证明被减数的符号是负号,即-2<

.

有符号数和无符号数的比较。

系统会自动把有符号数转换成无符号数。

fffffffeH=94D<

2D(是错误的)=2H

(2)

IgEdrr

fr半o)42

-出6X

ttLrKlud^KlAxcl“Q・hv

WOLd貝)

UMLgneQILnt1“=

U3M严gnedAs'

rrt'

bNl】

dl»

CH+eH屛®

prLnrfff--unsignedinrt-had"

n-krr

CL-Abhe.M”^

P「inrt-*lr-crl3igrindshorrt-is*d+n=s“

 

xupengOxupeng-vlrtua'

l^nachine:

-xupenggxupeng-virtual■nachtne:

*basht./b:

进有那个文件就目录xupeng@xupeng-virtual-nachtrie:

-bzh:

jb・Q:

没有那个文件就目录Kuptngdxupenij-virtual^nachLnt!

1:

*xupeng^xupen^-virtual-nachtn«

:

~unsignedintis0unsignedshortIs1xupcft^gxupeft^-virtual-na^hine:

-

因为所有比int型小的数据类型(包括char,signedchar,unsignedchar,short,signed

short,unsignedshort)转换为int型。

如果转换后的数据会超出int型所能表示的范围的话,

则转换为unsignedint型;

所以题中的c在和a比较时应该先转换成int型,再转换成unsigned

int型,所以此时的c为11111111111111111111111111111111B(有符号数按最高位符号

位进行扩位)即FFFFFFFFH此时的a为1H,显然c大于a,所以第一次输出的是unsignedintis0;

同理当b和c比较时,c应该转换成int型,所以此时的c为11111111111111111111

111111111111B即FFFFH=-47Db也应该转换成int型,所以此时的b为0000000000000000

0000000000000001B=1D,显然b>

c,所以输出unsignedshortis1

#include<

Voidmain()

Unsignedinta=1;

Unsignedshortb=1;

Charc=-1;

Intd;

d=(a>

c)1:

printf(“unsignedintis%”,d);

d=(b>

}

(3)

OO0护buntu:

"

Ttnoyeyscgubjntu:

cdzuoyeysc^ubdntu:

~/zuoye$gcco1l*cy^c^ubjntu:

-/zuOyeS.j1

yscfcubuntu:

-/zuoyeSgcc-o22*cget:

error:

2,c:

Nosuchfileordirectorygcc:

fatalerror*noinputfilescunfjlldtlofiterininated*ysc^ubuntu:

-/zuoye$.门

bash:

tJ2:

NosuchTileordirectoryysc^ubjntu:

-/zuoye$gcc-o22,c

gcc:

error:

2*c:

Na^uchfileordLrectorygcc:

ratalerror:

noInputtilescoripilationterminated,

ysegubuntu^-/zuoyeSgcc*o33»

cysc^ubuntui~/zuoyc$,/3

0x34

yscgubdfitu:

-/zuoye$

由于在union共用体当中,inta和charb[4]数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行=Ox;

同时b也会被赋值,b的内存示意图如下:

b的值

8

7

6

5

4

3

2

b的地址

b[0]

b[1]

b[2]

b[3]

由上图可知执行printf("

0x%X\n"

会输出0x34。

现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0x这个值中,1和2分别在最高位

和次高位,它就会存储在下标大的b[3]中,以此类推,便可以得到表中的数据。

这也证明了

我的32位Ubuntu是小端存储(字数据的高字节存储在高地址中,而字数据的低字节则存储在低地址中)。

(4)

Mb

-gedit

ex

#讣匚ludeestdi(j_hAvoid

nain()

inta=214748364S;

tntb=-21474E364B;

intc='

21474S3549;

unsignedshortd=65539:

short32790;

prtntf(r%d\n'

’m);

printfC"

Sd\nnfb);

printf(h5fid\n"

戊};

prlntf(Fsd\n,'

上);

printfCr'

Sdyn"

pe);

GC

核*yscf^ubuntu:

*/zuoye

intd=214746304a;

A

4.c:

b:

3;

warning:

thisdectnalconstanttsunsignedonlytniso匚沁[enablebydefault]

tntb^-214M&

3648:

4,c:

6:

3:

thisc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1