我是靠谱客的博主 怕孤独冬瓜,最近开发中收集的这篇文章主要介绍关于unsigned short越界的一个小实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前几天参加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越界的一个小实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部