c++基本數據處理

c++程序設計實踐教程課本題目。實驗二 基本數據處理2_1

調試示例,有三個變量a,b,c,定義及賦值如下,請正確輸出它們的原值,其數據類型的定義是否正確?

#include<iostream>
void main()
{
    short int a = 65535;
    unsigned int b = -8;
    long int c = 12.34;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    cout << "c= " << c << endl;
}

期望的運行結果爲:

a= 65535;

b= -8;

c= 12.34;

這道題考的是short int 、unsigned int 、long int類型的範圍。

二話不說跑去百度了一下:https://blog.csdn.net/u012372584/article/details/77824218

自己也在自己的機子上運行了鏈接了的程序,發現64位機子也是一樣。

即short int 的範圍爲 -32768~32767。顯然上面的題目 a= -1。

分析:

65535存儲內容的二進制格式爲1111 1111 1111 1111,這個值傳給short int類型的 a變量,因爲首位爲1,故此值是負數,然後反碼加1, 0000 0000 0000 0000  +1 => 1,即a =-1

同理, 可以算一下-8的機器碼:

高位1,絕對值8的原碼爲 0000 0000 0000 0000 0000 0000 0000 1000

反碼,1111 1111 1111 1111 1111 1111 1111 0111

+1得到機器碼: 1111 1111 1111 1111 1111 1111 1111 1000

因爲是無符號類型的,所以b = 4294967288 (我直接算2的32次方減去8)

long int 是整型,小數值直接過濾掉了。

要想得到預期的輸出,可以按照以下代碼更改:

#include<iostream>
void main()
{
    int a = 65535; // 或者unsigned short int a = 65535;
    int b = -8;
    double c = 12.34; // 或者float c = 12.34f;
    cout << "a= " << a <<endl;
    cout << "b= " << b <<endl;
    cout << "c= " << c <<endl;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章