嘿,我的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 = 1011y = 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/

10-11 23:19