首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于unsigned int,该怎么解决

2012-04-26 
关于unsigned int大家好,我写了一个测试程序:C/C++ code#include inttypes.h#include iostreamusing n

关于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的二进制转化成十进制,然后输出一个整数呢?
[解决办法]
探讨

为什么不是将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。

懂了?

热点排行