You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言位运算符程序接收用户输入后输出异常,如何修改?

修复位运算C程序的输入输出错误

问题根源

你的代码存在三个核心问题导致输出异常:

  • scanf格式符不匹配:unsigned char对应的输入格式符是%hhu,你误用了%d(对应int类型)。输入值若超出0-255范围会被错误截断,甚至可能触发内存访问异常。
  • 按位取反的处理错误:unsigned char参与运算时会被提升为int,~a得到的是int类型的取反结果(比如a=0时,~a是0xffffffff,对应int的-1),直接赋值回unsigned char会截断高位,导致输出结果不符合预期。
  • 换行符语法错误:printf中的 是无效转义,应该用\n,否则输出格式会混乱。

修正后的代码

#include<stdio.h>

int main()
{
    unsigned char a, b;
   
    printf("Enter first number : ");
    scanf("%hhu", &a);
    printf("Enter 2nd number : ");
    scanf("%hhu", &b);

    printf("a&b = %u\n", (unsigned int)(a&b));
    printf("a|b = %u\n", (unsigned int)(a|b));
    printf("a^b = %u\n", (unsigned int)(a^b));
    
    printf("~a = %u\n", (unsigned int)(~a));
    printf("b<<1 = %u\n", (unsigned int)(b<<1));
    printf("b>>1 = %u\n", (unsigned int)(b>>1));

    return 0;
}

关键修改说明

  1. 输入格式符修正:用%hhu替代%d,确保输入值正确写入unsigned char变量,仅接受0-255的合法数值。
  2. 输出类型转换:位运算结果会自动提升为int,将其强制转换为unsigned int后用%u输出,避免符号扩展导致的负数输出(比如~0作为unsigned int输出是4294967295,符合无符号取反的逻辑)。
  3. 移除错误赋值:直接输出~a的运算结果,不修改原变量a,避免截断导致后续运算出错。
  4. 修正换行符:把无效的 改为标准换行符\n,保证输出格式正常。

内容的提问来源于stack exchange,提问作者Mohit Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:05:18