我是靠谱客的博主 怕孤独冬瓜,这篇文章主要介绍关于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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部