我必须在C中添加一个数字。我必须在没有像'+','++'等算术运算符的情况下这样做。
我写了以下代码行。
int a = 1234;
int b = 1;
printf("%d", a ^ b);
这一点工作正常,直到达到整数限制,即32位是4294967295.但我在许多其他网站上看到他们执行相同的两个数字的AND,然后是XOR和左移。
请告知我的方法是否正确,因为我是C的新手。
答案 0 :(得分:5)
您的方法不正确。您应该使用+
在C:
int a = 1234;
int b = 1;
printf("%d\n", a + b); // Prints 1235
你说"这个工作正常,直到达到整数限制"关于你的方法,但你错了。当a
是奇数时,^
操作的结果是减1:
int a = 1235;
int b = 1;
printf("%d\n", a ^ b); // Prints 1234
printf("%d\n", a + b); // Prints 1236, using the correct operator
在这里,您可以看到您当前使用的方法对于奇数不正确。
答案 1 :(得分:1)
在这种方法中,你没有做到精确的添加。但它看起来像。
a = 00000000 00000000 00000100 11010010
b = 00000000 00000000 00000000 00000001
------------------------------------------
a^b = 00000000 00000000 00000100 11010011
------------------------------------------
^ this bit is toggled
例如,当您尝试使用1234进行XOR 3时,您将获得输出为1233.因为XOR操作
a = 00000000 00000000 00000100 11010010
b = 00000000 00000000 00000000 00000011
------------------------------------------
a^b = 00000000 00000000 00000100 11010001
------------------------------------------
^ here this bit is toggled.
当您使用XOR添加时,并不意味着您要添加。所以请记住这一点并进行必要的操作!
答案 2 :(得分:0)
^
用于执行XOR操作,+
用于执行"添加"操作。
我强烈建议+
执行任何类型的添加内容,例如两个数字的总和,或减去一个数字和另一个数字的负数,或者增加某个数量的变量值。
此外,它可以准确地增加" 1"使用++
一元运算符的变量值:x++
相当于x = x + 1
。
此外,+=
运算符可用,它将变量按右侧指定的数量递增:x += 1
。
如果幸运的话,可以选择任意一个运算符,比如说<OPER>
,然后写一些表达式,比如x <OPER> <FREAK OPERAND>
,从而获得&#34;添加1&#34的效果;变量。
但是,将这种方法概括为更复杂的情况可能很困难(例如,&#34;添加2&#34; 操作)。