加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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';

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读