热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CS2505DataLab:DataandBitwiseOperations

CS2505Spring2019DataLab:DataandBitwiseOperationsAssigned:March19Due:TuesdayMarch29,23:59En


CS 2505 Spring 2019
Data Lab: Data and Bitwise Operations
Assigned: March 19
Due: Tuesday March 29, 23:59
Ends: Friday April 5, 23:59
1 Introduction
The purpose of this assignment is to become more familiar with bit-level representations of integers. You’ll
do this by solving a series of programming “puzzles.” Many of these puzzles are quite artificial, but you’ll
find yourself thinking much more about bits in working your way through them.
2 Logistics
You may work in pairs for this assignment. If you work with a partner, list both names and both PIDs in a
comment at the beginning of the bits.c file you submit.
3 Handout Instructions

代做CS 2505留学生作业、代做Bitwise Operations作业、代写C++实验作业、C++程序语言作业调试
Download the file datalab-handout.tarfrom the course website to a (protected) directory on a Linux
machine on which you plan to do your work. Then give the command
unix> tar xvf datalab-handout.tar
This will cause a number of files to be unpacked in the directory. The only file you will be modifying and
turning in is bits.c.
The bits.c file contains a skeleton for each of the assigned programming puzzles. Your assignment is
to complete each function skeleton using only straightline code for the integer puzzles (i.e., no loops or
conditionals) and a limited number of C arithmetic and logical operators. Specifically, you are only allowed
to use the following eight arithmetic and logical operators:
! & | + <<>>
(Of course, you are allowed to use the assignment operator.) A few of the functions further restrict this list.
Also, you are not allowed to use any literal constants longer than 8 bits. See the comments in bits.c for
detailed rules and a discussion of the desired coding style.
1
4 The Puzzles
This section describes the puzzles that you will be solving in bits.c.
4.1 Bit Manipulations
Table 1 describes a set of functions that manipulate and test sets of bits. The “Rating” field gives the
difficulty rating for the puzzle, the “Max Ops” field gives the maximum number of operators you are allowed
to use to implement each function, and the “Points” field shows how many points a solution to the puzzle is
worth. See the comments in bits.c for more details on the desired behavior of the functions. You may
also refer to the test functions in tests.c. These are used as reference functions to express the correct
behavior of your functions, although they don’t satisfy the coding rules for your functions.
Name Description Rating Max
Ops Points
bitAnd(x, y) returns x & y 1 8 30
upperBits(n) pads n upper bits with 1’s 1 10 30
byteSwap(x, n, m) swaps the nth byte and the mth byte of x 2 25 25
isLess(x, y) if x Table 1: Required Functions
5 Evaluation
Autograding your work
We have included some autograding tools in the handout directory — btest, dlc, and driver.pl —
to help you check the correctness of your work.
btest: This program checks the functional correctness of the functions in bits.c. To build and
use it, type the following two commands:
unix> make
unix> ./btest
Notice that you must rebuild btest each time you modify your bits.c file.
You’ll find it helpful to work through the functions one at a time, testing each one as you go. You can
use the -f flag to instruct btest to test only a single function:
unix> ./btest -f subOK
You can feed it specific function arguments using the option flags -1, -2, and -3:
unix> ./btest -f subOK -1 0xFFFFFFFF 0xFAFAFAFA
Check the file README for documentation on running the btest program.
2
dlc: This is a modified version of an ANSI C compiler from the MIT CILK group that you can use
to check for compliance with the coding rules for each puzzle. The typical usage is:
unix> ./dlc bits.c
The program runs silently unless it detects a problem, such as an illegal operator, too many operators,
or non-straightline code in the integer puzzles. Running with the -e switch:
unix> ./dlc -e bits.c
causes dlc to print counts of the number of operators used by each function. Type ./dlc -help
for a list of command line options.
driver.pl: This is a driver program that uses btest and dlc to compute the correctness and
performance points for your solution. It takes no arguments:
unix> ./driver.pl
Your instructors will use driver.pl to evaluate your solution. If your code does not compile
when tested with driver.pl you will receive a 0 for the assignment.
Scoring rules
Your score will be computed out of a maximum of 100 points based on the following distribution:
Correctness points. (maximum 80 points) The 4 puzzles you must solve have been given a difficulty rating
between 1 and 3. Each of the puzzles will be worth the number of points shown in the tables above, but the
5 points for each puzzle will be reserved for performance. We will evaluate your functions using the btest
program, which is described in the next section. You will get full credit for a puzzle if it passes all of the
tests performed by btest and driver.pl, and no credit otherwise.
Performance points. (maximum 20 points) Our main concern at this point in the course is that you can get
the right answer. However, we want to instill in you a sense of keeping things as short and simple as you
can. Furthermore, some of the puzzles can be solved by brute force, but we want you to be more clever.
Thus, for each function we’ve established a maximum number of operators that you are allowed to use for
each function. This limit is very generous and is designed only to catch egregiously inefficient solutions.
You will receive 5 points for each correct function that satisfies the operator limit.
Explanation and analysis points. (maximum deduction 40 points) You must add to the header comment
for each function an explanation of the logic employed in your solution. This comment must be accurate,
precise and complete. For example:
3
/*
* isNotMultOf4 - returns 0 if x is a multiple of 4,
* non-0 otherwise
* Examples: isMultOf4(0x033B104C) = 0
* isMultOf4(0x033B1046) != 0
* Legal ops: ? & ? |
* Max ops: 5
* Rating: 1
* Logic:
* x is a multiple of 4 if and only if x % 4 = 0. But, since
* x % 4 returns the remainder when x is divided by 4, and
* dividing by 4 will simply chop off the two low bits of x,
* x % 4 will yield the two low bits of the representation
* of x. So, x is a multiple of 4 if and only if its
* representation ends in two 0s.
*
* We can obtain the desired bits by applying the right
* mask to x. The key is to set the 30 high bits to 0,
* so we could do this: x & 0x00000003.
*
*/
int isMultOf4(int x) {
int mask = 0x03; // OK, it’s a one-byte constant ’0011’,
// which will be sign-extended to a
// 32-bit value:
// 00000000 00000000 00000000 00000011.
return x & mask; // 0 if low bits are 00, non-0 otherwise
}
We will evaluate your explanations for some, but not all, of the functions. If your explanation for a function
is unsatisfactory, we will apply a deduction of up to 10 points to your score for that function.
The evaluation of these comments will be performed by the TAs, not by the autograding tools described
below. It is up to you to make sure your explanations are worthy of credit.
6 Handin Instructions
You will submit your bits.c file to the Curator under the heading c06. Like the earlier programming
assignments, this is not autograded at the time of submission. Instead, we will periodically run autograding
code on your submissions, and post the results to the Curator system.
Of course, if you apply the tools btest, dlc, and driver.pl properly, you will already know whether
your solution passes testing.
4
7 Advice
The nature of this assignment requires creating a 32-bit executable. However, 64-bit Linux distributions,
including CentOS, do not include some libraries that are necessary to build a 32-bit executable.
That leaves you with two choices.
You can complete the assignment on a node in the rlogin cluster, which do support 32-bit builds.
Or, you can update your CentOS virtual machine to include the necessary libraries. The following
command may suffice:
> yum install glibc-devel.i686
If not, you may find the discussion below to be helpful:
stackoverflow.com/questions/23638271/how-to-compile-32-bit-apps-on-64-bit-rhel
Don’t include the header file in your bits.c file, as it confuses dlc and results in
some non-intuitive error messages. You will still be able to use printf in your bits.c file for
debugging without including the header, although gcc will print a warning that you
can ignore.
The dlc program enforces an archaic form of the C Standard. In particular, its rules for declarations
are different than those enforced by gcc. In particular, any declaration must appear in a block (what
you enclose in curly braces) before any statement that is not a declaration. For example, it will
complain about the following code:
int foo(int x)
{
int a = x;
a *= 3; /* Statement that is not a declaration */
int b = a; /* ERROR: Declaration not allowed here */
}
The effect will be that dlc will ”zap” the offending code, and it will not compile, or will compile but
not perform correctly. You can avoid lots of disappointment if you make sure you use driver.pl
to do the final testing of your solution.
We will make no accommodations for failing to test your solution with driver.pl; you have been
warned.
5

因为专业,所以值得信赖。如有需要,请加QQ:99515681 或邮箱:99515681@qq.com 

微信:codinghelp


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
author-avatar
大帅哥明日夜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有