c++中 unsigned short 赋值100000,其结果是多少,为什么?(请解释清楚)
来源:百度知道 编辑:UC知道 时间:2024/06/26 00:02:32
结果是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)
{