Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法理解~运算符在c中是如何工作的_C_Expression_Casting - Fatal编程技术网

无法理解~运算符在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