gpt4 book ai didi

c - unsigned char c = 255 是 "11111111"还是不是?

转载 作者:太空狗 更新时间:2023-10-29 16:52:59 26 4
gpt4 key购买 nike

这是我的问题代码:

#include "stdio.h"

int main()
{
char a = -1;
unsigned char b = 255;
unsigned char c = 0;
if((~a) == c)
printf("OK 1");
else
printf("bad 1");
printf("\n");
if((~b) == c)
printf("OK 2");
else
printf("bad 2");
printf("\n");
}

我希望这样打印:

OK 1

OK 2

但是,我得到 OK 1 和 bad 2!

如果 unsigned char b 是 255 (11111111),那么 ~b 应该是 00000000。为什么它不等于 c?

我在 Linux SUSE 上工作,使用 gcc。

最佳答案

您正被整数促销所困扰。当你这样做时:

~b == c

bc 都被提升为 int。这意味着你真的在做:

~0x000000ff == 0

最终比较:

0xffffff00 == 0

哪个不匹配。它适用于您的第一种情况,因为您的 char 类型已签名,并在促销事件中得到扩展:

~a == c
~(-1) == 0
~0xffffffff == 0
0 == 0

关于c - unsigned char c = 255 是 "11111111"还是不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com