关于unsigned int
大家好,我写了一个测试程序:
- C/C++ code
#include <inttypes.h>#include <iostream>using namespace std;int main(){ uint16_t val; cin >> val; cout << val << endl; return 0;}由于整型和char是兼容的,我输入:字符a,但是输出的确是0,这是为什么?谢谢!
[解决办法]
整形和char 从来就不是兼容的.
看c++ primer ;不要看垃圾书/
[解决办法]
第一,兼容最多只是说二进制上面的兼容.
而对于输入来说:
输入的是字符,然后被解析成数字.
a不代表任何十进制数据.
所以只得到了0.
[解决办法]
为什么不是将a的二进制转化成十进制,然后输出一个整数呢?
[解决办法]
[解决办法]
因为cin >> val执行失败了,val并没有被赋予任何值,所以估计不管你输入什么字母,val都是0。
[解决办法]
operator > > 是一系列的全局重载函数,针对char,int,char*,double等。
因为是重载函数,所以类型是固定的,你是int n; cin> > a就会调用int的那个重载,结果你输入的东西不是 '0 '- '9 '的ascii字符,你让函数怎么办,当然是标记failbit了。
能从控制台输入的字符就是0-127的ASCII char字符,字符到数字的转化是借助这些重载函数来转换的,举个例子,比如键盘输入: 123, 那么operator > > 将会从键盘read读入: '1 ' '2 ' '3 '这三个字符,之后计算得到一个int变量:((0*10+( '1 '- '0 '))*10+( '2 '- '0 '))*10 + ( '3 '- '0 ') == (int)123。
懂了?