c++中 unsigned short 赋值100000,其结果是多少,为什么?(请解释清楚)

来源:百度知道 编辑:UC知道 时间:2024/06/26 00:02:32
如题,在C++中给unsigned short 赋值100000,其结果是多少?

结果是34464

unsigned short的范围是0~65535,

你赋值65536,结果是0;
赋值65537,结果是1;
赋值65538,结果是2;

说明什么,越界了要从头计数,要想深入了解,还是多了解汇编吧。

编译器是这样工作的。
对于赋值语句的编译,在没有显式转换时利用隐式转换机制。
如你的声明unsigned short val; val为2字节无符号整数
当出现val=65537; 语句时,编译器将等式右边的数值隐式转换成unsigned short再赋值。
相当于val=(unsigned short)65537;
上式等价于val=(unsigned short)0x10001;
如果截取低2字节的话,val就等于1了

/*用下面的程序可以计算出100000的二进制表示为;
1 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0
由于unsigned short 表示的数值范围为
0~65535。它占用两个字节16位,
所以上面计算出来的二进制的超过
十六位的高位会被截断。只剩下
1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0

由于是无符号数,所以最高位1表示的是数值,不是符号位。
所以输出的结果就是1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0
对应的十进制数34464 。

*/

#include<iostream>
#include<stack>
using namespace std;

int main()
{
unsigned short a=100000;
int b=100000;

stack<int> s;

while(b)
{