前几天参加google笔试,有一道unsigned short的题目不会,想让自己试一下unsigned short的特性,于是:

 

#include <cstdlib>
#include <iostream>
#include "stack.h"
#include "stack.c"
#include <vector>
using namespace std;


int main(int argc, char *argv[])
{
    unsigned short a = 65535;
    unsigned short b = 1;
    
        cout<<a + b<<endl;


       
    system("PAUSE");
    return EXIT_SUCCESS;
}

 

a是unsigned short里面最大的,是65535,b是unsigned short形式的1,cout<<a + b <<endl; 输出的是65536,说明cout<<a + b<<endl;是新生成了一个临时变量(估计类型是int,发生了扩展),而如果红色部分改成:

a = a + b;

cout<<a + b<<endl;

那么结果是1,在第一步a = a + b;中a变成了0,因为a本身就是unsigned short,那么a不会发生扩展,继而发生越界,变为0,再第二步中,再输出a+b,因为是0+1,不必扩展,所以结果就是1。