试图理解,但我无法得到完美的答案。
#include<iostream>
using namespace std;
int main(){
unsigned char ch = '150';
int count=0;//just to get a count for the loop
cout << (int)ch<<endl;
for (int i = 0; i <= ch * 2; i++){
cout << "Hello" << endl;
count++;
}
cout << count;
return 0;
}
当我分配时:
unsigned char ch = '250';
如果是打印相同的输出。我从输出中理解的是,它取数字的最后一个索引,即0,并且从ASCII查找表中给出了整数值为48的
unsigned char ch = '186';
给我整数值为54,(这是数字6的ASCII值)
unsigned char ch = '154';
给我整数值为52,(这是数字2的ASCII值)
答案 0 :(得分:1)
不,因为你已经将值包装在单引号附近它变成了多字符常量,它的值是实现定义,所以它与之无关任何一个字符的索引,因为没有涉及字符。
如果您想要值150
,那么
unsigned char c = 150;
就是这样。
你拥有它的方式,它的类型确实是int
,严格来说你不能在unsigned char
中存储这样的值,因此编译器可能会发出警告,而另一个则为< em>多字符常量为非便携式。
一般情况下,不要忽略警告,除非你知道编译器会事先警告它,并且在这种情况下帮助编译器通过采取适当的操作来忽略这种警告,这取决于情况。
答案 1 :(得分:1)
有一些方法可以声明unsigned char
字符文字:
unsigned char ch1 = 150;
unsigned char ch2 = 0x96;
unsigned char ch3 = '\150';
unsigned char ch4 = '\x96';
unsigned char ch5 = '\0226';
unsigned char ch6 = 0226;
unsigned char ch7 = 0b10010110;
选择应用程序中最具可读性的那个
如果你施放到int
你的var打印为数字,而不是字符。
如果你想要角色,不要施放
cout << ch << endl;
答案 2 :(得分:0)
之间存在很大差异:
unsigned char ch = '150'; // wrong way
unsigned char ch = 150; // correct way (conversion from integer to char according to ASCII standard)
正如你可以看到我的第一行,只要ch是char类型,你给它分配一个字符串(多字符常量)。这里不会发生从ASCII到int或相反的转换,但面对来自编译器的警告:
warning C4309: 'initializing' : truncation of constant value
正确的方法是只为一个字符变量分配一个字符:
unsigned char ch = '1'; // or any other character.
在第二个声明中:
unsigned char ch = 150;
值150
以上是整数值而不是字符串,因此编译器会根据ASCII表û
将其转换为字符。
另一个例子:
char ch = 65; // which is capital a `A` in ASCII.
std::cout << ch << std::endl; // A