在char中存储十六进制数
发布时间:2020-12-16 09:46:17 所属栏目:百科 来源:网络整理
导读:#include stdio.hint main(int argc,char const *argv[]){ char a = 0xAA; int b; b = (int)a; b = b 4; printf("%xn",b); return 0;} 这里的输出是fffffffa.有谁能请向我解释这个输出是如何获得的? 解决方法 C标准允许编译器设计者选择char是有符号还是无
#include <stdio.h> int main(int argc,char const *argv[]) { char a = 0xAA; int b; b = (int)a; b = b >> 4; printf("%xn",b); return 0; } 这里的输出是fffffffa.有谁能请向我解释这个输出是如何获得的? 解决方法
C标准允许编译器设计者选择char是有符号还是无符号.您的系统似乎使用签名字符和32位整数.由于0xAA(二进制10101010)的最高位被置位,该值被符号扩展为0xFFFFFFAA.
向右移位有符号值也会对结果进行符号扩展,因此当您移出低4位时,有4个从左侧移入,导致最终输出为0xFFFFFFFA. 编辑:根据C99规范,您的示例中的十六进制整数常量(如0xAA)将根据其长度视为不同长度的整数.因此,为有符号的char分配0xAA超出范围:分配值的正确方法是使用十六进制字符文字,如下所示: char a='xAA'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |