无法理解~运算符在c中是如何工作的
我有这段代码,你能解释一下输出吗无法理解~运算符在c中是如何工作的,c,expression,casting,C,Expression,Casting,我有这段代码,你能解释一下输出吗 unsigned int x=3; ~x; printf("%d",x); 产量为10 我不知道该怎么做 我已经在turbo c上编译了代码,以打印无符号值,特别是在处理位时,请使用无符号格式打印F: printf("%u", x); 我不确定您是否实际运行了显示的代码。见此: #include <stdio.h> int main() { unsigned int x = 3; unsigned int y = ~x;
unsigned int x=3;
~x;
printf("%d",x);
产量为10
我不知道该怎么做
我已经在turbo c上编译了代码,以打印无符号值,特别是在处理位时,请使用无符号格式打印F:
printf("%u", x);
我不确定您是否实际运行了显示的代码。见此:
#include <stdio.h>
int main()
{
unsigned int x = 3;
unsigned int y = ~x;
printf("Decimal. x=%u y=%u\n", x, y);
printf("Hex. 0x%08X y=0x%08X\n", x, y);
return 0;
}
通过基本的二进制算法(请记住,C的
~
运算符翻转了它的参数位),应该可以清楚地看出这些值是什么样子。您发布的代码不会编译。如果将~x
更改为x=~x,它将编译代码>,但它不会给出输出“10”
~
运算符创建给定数字的位反转。在二进制中,数字3作为八位整数由位00000011
表示。~
运算符将这些位中的每一位替换为其相反的位,得到111111 00
,即252无符号或-4有符号
您将x
声明为unsigned int
,这在大多数平台上表示32位无符号值。因此,您的原始值是00000000000000000011
,相反的值是111111111111111111111 00
,或4294967292。您真的编写了代码/编译并运行了它,它给了您10?或者你是在什么地方读到的?那个代码示例看起来好像无法编译。~x
后面缺少一个分号。该代码将打印3
:@Mark:no,当JS Bangs写他的答案时,缺少一个分号;(参见相关编辑)这样代码就不会编译。
Decimal. x=3 y=4294967292
Hex. 0x00000003 y=0xFFFFFFFC