c – char val =’abcd’.使用多字符char

c – char val =’abcd’.使用多字符char,第1张

概述我对编译器如何处理具有多个字符的char变量感到困惑.我知道char是1个字节,它可以包含一个像ASCII这样的字符. 但是当我尝试: char _val = 'ab';char _val = 'abc';char _val = 'abcd'; 它们编译得很好,当我打印_val时,它总是打印出最后一个字符.但是当我这样做的时候 char _val = 'abcde'; 然后我收到编译错误: E 我对编译器如何处理具有多个字符的char变量感到困惑.我知道char是1个字节,它可以包含一个像ASCII这样的字符.

但是当我尝试:

char _val = 'ab';char _val = 'abc';char _val = 'abcd';

它们编译得很好,当我打印_val时,它总是打印出最后一个字符.但是当我这样做的时候

char _val = 'abcde';

然后我收到编译错误:

Error 1 error C2015: too many characters in constant

所以我的问题是:

>为什么编译器总是在使用多个字符时使用最后一个字符?在这种情况下编译器机制是什么.
>当我输入5个字符时,为什么会出现太多字符错误. 2个字符比char可以处理的更多,为什么5?

我正在使用Visual Studio 2013.

谢谢.

解决方法 [lex.ccon] / 1:

An ordinary character literal that contains more than one c-char is a
multicharacter literal. A multicharacter literal [..] is conditionally-supported,has type int,and
has an implementation-defined value.

Why does the compiler always takes the last character when multiple
characters are used? What is the compiler mechanism in this situation.

大多数编译器只是将字符值按顺序移动到一起:这样,最后一个字符占据最低有效字节,倒数第二个字符占据最低有效字符旁边的字节,依此类推.
即’abc’相当于’c'((int)’b’)<< 8)(((int)'a')<< 16)(Demo).

将此int转换回char将具有一个实现定义的值 – 可能只是从int modulo 256的值中获得.这只会给你最后一个字符.

Why dID I get a too many characters error when I put 5 characters. 2
characters is more than what a char can handle so why 5?

因为在你的机器上,一个int可能大四个字节.如果以上确实是编译器排列多字符常量的方式,则不能将五个char值放入int中.

总结

以上是内存溢出为你收集整理的c – char val =’abcd’.使用多字符char全部内容,希望文章能够帮你解决c – char val =’abcd’.使用多字符char所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1257135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存