C 中的一元运算符否定不起作用
Unary operator negation in C not working
我正在尝试使用 C 中的一元运算符 ~ 翻转数字的位,但该函数似乎 return 什么都没有。我做的代码如下:
#include<stdio.h>
int flipBits(int n) {
return ~n;
}
void convertbinary(int n)
{
while(n>0)
{
printf("%d",n%2);
n=n/2;
}
}
int main()
{
int n=21;
int x=flipBits(n);
convertbinary(x);
}
以上代码的输出是空的。它return-22。
我最终想要完成的是将给定数字的 MSB 更改为 0。我想出的解决方案是
n&&((n^~(n)>>1)
所以,基本上,将数字与其倒数进行异或运算以获得全 1,然后右移以使 MSB 为 0,并与原始数字进行 AND 运算以使原始数字的 MSB 为 0。
例如
if n=21 i.e. 10101; ~n=01010; n^~n=11111; (n^~n)>>1 = 01111; n&&((n^~n)>>1)=00101
如果我做错了什么,请指正。谢谢。
代码不打印任何内容,因为 21 的负数是负数。
21 = 0000000...010101
翻转每一位产生:
1111111...101010
因此,循环条件 (n > 0
) 永远不会为真。你可能想要 while (n != 0)
而不是:
void convertbinary(int n)
{
while (n != 0)
{
printf("%d",n%2);
n=n/2;
}
}
或者您可以继续使用 n > 0
并使 n
成为 unsigned
。
我正在尝试使用 C 中的一元运算符 ~ 翻转数字的位,但该函数似乎 return 什么都没有。我做的代码如下:
#include<stdio.h>
int flipBits(int n) {
return ~n;
}
void convertbinary(int n)
{
while(n>0)
{
printf("%d",n%2);
n=n/2;
}
}
int main()
{
int n=21;
int x=flipBits(n);
convertbinary(x);
}
以上代码的输出是空的。它return-22。 我最终想要完成的是将给定数字的 MSB 更改为 0。我想出的解决方案是
n&&((n^~(n)>>1)
所以,基本上,将数字与其倒数进行异或运算以获得全 1,然后右移以使 MSB 为 0,并与原始数字进行 AND 运算以使原始数字的 MSB 为 0。 例如
if n=21 i.e. 10101; ~n=01010; n^~n=11111; (n^~n)>>1 = 01111; n&&((n^~n)>>1)=00101
如果我做错了什么,请指正。谢谢。
代码不打印任何内容,因为 21 的负数是负数。
21 = 0000000...010101
翻转每一位产生:
1111111...101010
因此,循环条件 (n > 0
) 永远不会为真。你可能想要 while (n != 0)
而不是:
void convertbinary(int n)
{
while (n != 0)
{
printf("%d",n%2);
n=n/2;
}
}
或者您可以继续使用 n > 0
并使 n
成为 unsigned
。