在C++中有符号和无符号的范围是什么?如何声明和赋值有符号数呢?如何声明和赋值无符号数呢?有符号数的声明可以省略吗?可以。无符号数的声明可以省略吗?不可以。无符号数字简略声明方式是什么呢?

问题描述:

根据下面代码回答一下下列问题。

// Created by 黑马程序员.
#include "iostream"
#include "windows.h"
using namespace std;


int main()
{
    SetConsoleOutputCP(CP_UTF8);
    // 有符号:signed(可选),  无符号:unsigned(必写)
    signed int num1 = 10;   // 都是有符号int
    int num2 = -10;         // 都是有符号int
    cout << num1 << "," << num2 << endl;

    unsigned int num3 = 30;    // 无符号的数字,必须大于等于0
    unsigned int num33 = -30;    // 假如无符号的数字,小于0,为什么输出的结果是这个小于0的有符号补码对应的无符号数字的十进制数字呢,而不是报错呢?
    cout << num3 << endl;
    cout << num33 << endl;

    // long 无符号
    unsigned long num4 = 50;

    // 无符号的int、short、long 有快捷写法
    u_short num5 = 100; // 等同于 unsigned short
    u_int num6 = 200;   // 等同于 unsigned int
    u_long num7 = 1000; // 等同于 unsigned long

    cout << num5 << "," << num6 << "," << num7 << endl;

    return 0;
}

在C++中有符号和无符号的范围是什么?

如何声明和赋值有符号数呢?

如何声明和赋值无符号数呢?

有符号数的声明可以省略吗?可以。

无符号数的声明可以省略吗?不可以。

无符号数字简略声明方式是什么呢?

无符号数字简略声明方式需要引入#include "windows.h"吗?是的

问题解答:

在 C++ 中,有符号数和无符号数的范围以及声明和赋值的方式如下:

1. 有符号和无符号的范围

  • 有符号整数(signed):

    • int: 通常为 -2,147,483,648 到 2,147,483,647(32 位系统)
    • short: 通常为 -32,768 到 32,767(16 位系统)
    • long: 通常为 -2,147,483,648 到 2,147,483,647(32 位系统,64 位系统上可以是更大的范围)
    • long long: 通常为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(64 位系统)
  • 无符号整数(unsigned):

    • unsigned int: 0 到 4,294,967,295(32 位系统)
    • unsigned short: 0 到 65,535(16 位系统)
    • unsigned long: 0 到 4,294,967,295(32 位系统,64 位系统上可以是更大的范围)
    • unsigned long long: 0 到 18,446,744,073,709,551,615(64 位系统)

2. 如何声明和赋值

  • 有符号数的声明与赋值

signed int num1 = 10;  // 显式声明
int num2 = -10;        // 默认就是有符号int,可以省略signed
  • 无符号数的声明与赋值

unsigned int num3 = 30;   // 必须声明为unsigned
unsigned int num33 = -30; // 会将-30转为无符号数对应的值

3. 有符号数的声明可以省略吗?

  • 可以省略:有符号数的声明可以直接使用 intshort,默认就是有符号的。

4. 无符号数的声明可以省略吗?

  • 不可以:无符号数的声明必须显式使用 unsigned

5. 无符号数字的简略声明方式

  • 简略声明方式
u_short num5 = 100; // 等同于 unsigned short
u_int num6 = 200;   // 等同于 unsigned int
u_long num7 = 1000; // 等同于 unsigned long

6. 引入 #include "windows.h" 的必要性

  • 引入 #include "windows.h" 的必要性:虽然在这段代码中使用了 u_shortu_intu_long 这类简略写法,通常需要引入 windows.h 头文件。这些类型在 Windows API 中定义,因此如果希望使用这些类型,最好引入相应的头文件。

7. 解释 unsigned int num33 = -30; 的结果

当你执行 unsigned int num33 = -30; 时,编译器将 -30 转换为无符号整数的补码形式。在 C++ 中,负数会被视为它的补码,然后再被赋值给无符号变量,最终输出的结果是无符号数对应的十进制值,4294967266。这里没有报错,因为 C++ 支持从有符号到无符号的隐式转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值