Char数据类型算术表达式

标签 c

int main()

{

        char a = 'P';  

        char b = 0x80;  

        printf("a>b  %s\n",a>b ? "true":"false");  

        return 0;

}

为什么它的计算结果为真?

最佳答案

在您的系统上,char 已签名。它也是八位,因此 0x80 溢出了带符号的 8 位整数可以表示的内容。结果值为 -128。由于 P 是某个正值,因此它大于 -128。

C 允许对 char 类型进行签名或未签名。这是一个特殊的(烦人的)属性,不同于其他整数类型,例如 int。通常建议使用 unsigned char 显式声明字符类型,以便行为更加确定而不是依赖于实现。

关于Char数据类型算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663494/

相关文章:

c - C 中的 Glob 函数仅给出一个结果

c - 为什么 'c[&i]' 编译而 'c[i]' 不编译?

c - 如何测试 SOCK_CLOEXEC/O_CLOEXEC 的功能(执行时关闭)

c - 为什么要包含头文件? #include 是如何工作的?

c - 来自 ifconfig 和 libpcap 的接口(interface) ip 不匹配

使用 kiss_fft 将复杂频率转换为实际信号

c - 使用 "Pointer to a function"调用函数背后的逻辑

c - 具有多个参数的进程的 pthread

c - 定义 = 时预处理器错误

c - 在 gdb 上,LoadLibrary 满足 sti 指令并发出 SIGILL 信号