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; }
关键修改说明
- 输入格式符修正:用
%hhu替代%d,确保输入值正确写入unsigned char变量,仅接受0-255的合法数值。 - 输出类型转换:位运算结果会自动提升为int,将其强制转换为
unsigned int后用%u输出,避免符号扩展导致的负数输出(比如~0作为unsigned int输出是4294967295,符合无符号取反的逻辑)。 - 移除错误赋值:直接输出
~a的运算结果,不修改原变量a,避免截断导致后续运算出错。 - 修正换行符:把无效的
改为标准换行符\n,保证输出格式正常。
内容的提问来源于stack exchange,提问作者Mohit Sharma
相关产品推荐
相关产品推荐

