嘿,我的C程序有点问题。我必须编写的程序模拟VAX计算机的操作。我需要引入两个变量x和y来生成z。
其中有两个功能,第一个
将Z设置为1,其中y=1的每个位位置
第2个将z设置为0,其中y的每个位位置=1
我并不是要找人帮我做这些,我只是需要一个关于这是如何实现的解释,因为我对我需要的两个功能有一个基本的了解。我在想这样的事情,但我不知道它是否正确。
#include<stdio.h>
int main()
{
int x1 = 1010;
int y1 = 0101;
bis(x1, y1);
bic(x1, y1);
}
/* BIT SET function that sets the result to 1 wherever y = 1 */
int bis (int x, int y)
{
int z = x & y;
int result = ?;
printf("BIT SET: \n\n", result);
return result;
}
/* BIT CLEAR function that sets result to 0 wherever y = 1 */
int bic(int x, int y)
{
int z = x & y;
int result = ?;
printf("BIT CLEAR:\n\n ", result);
return result;
}
为糟糕的命名习惯道歉。我对这个节目的看法对吗?
最佳答案
让我们先看看bitset()。我不会发布C代码,但我们可以从纸上解决这个问题开始。
假设您的整数具有以下位模式:x = 1011
和y = 0101
。(我正在更改你的示例编号。顺便说一句,这不是定义两个具有这些位模式的整数的方法,但现在我们将重点放在逻辑上。)
如果我理解正确,当你打电话给bitset(x, y)
时,你希望答案Z是1111
。
x = 1011
y = 0101
^ ^-------- Because these two bits have the value 1, then your answer also
has to set them to 1 while leaving the other bits in x alone.
好吧,哪种按位操作可以完成这个任务?你有AND(
&
),OR(\
),XOR(^
)和补码(~
)。在本例中,您将对这两个值进行ORing。看看下面的真相表:
x 1 0 1 1
y 0 1 0 1
-----------------
(x OR y) 1 1 1 1
最后一行中的每一位是通过在x和y中对该列进行ORing来给出的。So(1或0)=1,(0或1)=1,(1或0)=1,(1或1)=1
所以现在可以编写一个C函数位集(x,y),orsx和y,并将结果返回为Z。
什么位运算符-你可以用多个运算符在多个步骤中完成-你会用来清除这些位吗?
x 1 0 1 1
y 0 1 0 1
-------------------------------------------
(SOME OPERATONS INVOLVING x and y) 1 0 1 0
这些逻辑运算符(从上面的列表中)是什么?想想“and”和“complete”操作符。
祝你好运!
另外:一个用C语言表达整数的快速入门。
int x = 1337
创建一个整数,并给它值1337
。如果你说x = 01337
,x的值就不会像你所期望的那样是“1337”。把0
放在数字前面,你就告诉C这个数字是八进制的(基数8)。以基数8解释的数字“1337”等于十进制(基数10)735。如果你说x = 0x1337
,那么你是以十六进制表示的,相当于以十进制表示的4919。关于c - 按位C编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5174356/