概述
前几天参加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。
转载于:https://blog.51cto.com/lihaozy/399640
最后
以上就是怕孤独冬瓜为你收集整理的关于unsigned short越界的一个小实验的全部内容,希望文章能够帮你解决关于unsigned short越界的一个小实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复