C++标准模板(STL)- 类型支持 (数值极限,is_modulo,digits,digits10)

news2025/3/1 22:59:53

数值极限

定义于头文件 <limits>

定义于头文件 <limits>

template< class T > class numeric_limits;

numeric_limits 类模板提供查询各种算术类型属性的标准化方式(例如 int 类型的最大可能值是 std::numeric_limits<int>::max() )。
 

鉴别以模算术处理溢出的类型

std::numeric_limits<T>::is_modulo

static const bool is_modulo;

(C++11 前)

static constexpr bool is_modulo;

(C++11 起)

std::numeric_limits<T>::is_modulo 对所有可能 (C++11 前)以模算术处理溢出的算术类型 T 为 true 。模算术即若此类型的加法、减法、乘法或除法结果会落在范围 [min(), max()] 外,则这种运算返回的结果与期望值相差 max()-min()+1 的整数倍。

is_modulo 对有符号整数类型为 false ,除非实现定义有符号整数溢出为回绕。

(C++11 起)

标准特化

Tstd::numeric_limits<T>::is_modulo 的值
/* non-specialized */false
boolfalse
char实现定义
signed char实现定义
unsigned chartrue
wchar_t实现定义
char8_ttrue
char16_ttrue
char32_ttrue
short实现定义
unsigned shorttrue
int实现定义
unsigned inttrue
long实现定义
unsigned longtrue
long long实现定义
unsigned long longtrue
floatfalse
doublefalse
long doublefalse

注意

尽管 C++11 标准仍然说“在大多数机器上,这对于有符号整数为 true ”,这是缺陷而且已被更正。准确措辞从 C++03 到 C++11 的更改使得 true 值不再与有符号整数溢出上的未定义行为兼容。因此,依赖于有符号溢出为未定义(为了优化机会)的实现现在对有符号整数设置 is_modulofalse 。见示例 GCC PR 22200 。

调用示例

#include <iostream>
#include <string>
#include <limits>

struct SName
{
};

//偏特化
struct SPartSpec
{
};

namespace std
{
template<>
struct numeric_limits<SPartSpec>
{
    static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;
    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;
    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;
    static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;
    static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;
};
}

int main()
{
    std::cout << std::boolalpha;
    std::cout << "std::numeric_limits<bool>::is_modulo:                 "
              << std::numeric_limits<bool>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char>::is_modulo:                 "
              << std::numeric_limits<char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<signed char>::is_modulo:          "
              << std::numeric_limits<signed char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned char>::is_modulo:        "
              << std::numeric_limits<unsigned char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<wchar_t>::is_modulo:              "
              << std::numeric_limits<wchar_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char16_t>::is_modulo:             "
              << std::numeric_limits<char16_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char32_t>::is_modulo:             "
              << std::numeric_limits<char32_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<short>::is_modulo:                "
              << std::numeric_limits<short>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned short>::is_modulo:       "
              << std::numeric_limits<unsigned short>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<int>::is_modulo:                  "
              << std::numeric_limits<int>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned int>::is_modulo:         "
              << std::numeric_limits<unsigned int>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long>::is_modulo:                 "
              << std::numeric_limits<long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned long>::is_modulo:        "
              << std::numeric_limits<unsigned long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long long>::is_modulo:            "
              << std::numeric_limits<long long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned long long>::is_modulo:   "
              << std::numeric_limits<unsigned long long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<float>::is_modulo:                "
              << std::numeric_limits<float>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<double>::is_modulo:               "
              << std::numeric_limits<double>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long double>::is_modulo:          "
              << std::numeric_limits<long double>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<std::string>::is_modulo:          "
              << std::numeric_limits<std::string>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<SName>::is_modulo:                "
              << std::numeric_limits<SName>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<SPartSpec>::is_modulo:            "
              << std::numeric_limits<SPartSpec>::is_modulo << std::endl;
    return 0;
}

输出

能无更改地表示的 radix 位数

std::numeric_limits<T>::digits

static const int digits;

(C++11 前)

static constexpr int digits;

(C++11 起)

 std::numeric_limits<T>::digits 的值是能无更改地表示类型 T 的 radix 底位数。对于整数类型,这是不含符号位和填充位(若存在)的位数。对于浮点类型,这是尾数的位数。

标准特化

Tstd::numeric_limits<T>::digits 的值(假设无填充位)
/* non-specialized */​0​
bool1
charCHAR_BIT - std::numeric_limits<char>::is_signed
signed charCHAR_BIT - 1
unsigned charCHAR_BIT
wchar_tCHAR_BIT*sizeof(wchar_t) - std::numeric_limits<wchar_t>::is_signed
char8_tCHAR_BIT
char16_tCHAR_BIT*sizeof(char16_t)
char32_tCHAR_BIT*sizeof(char32_t)
shortCHAR_BIT*sizeof(short)-1
unsigned shortCHAR_BIT*sizeof(short)
intCHAR_BIT*sizeof(int)-1
unsigned intCHAR_BIT*sizeof(int)
longCHAR_BIT*sizeof(long)-1
unsigned longCHAR_BIT*sizeof(long)
long longCHAR_BIT*sizeof(long long)-1
unsigned long longCHAR_BIT*sizeof(long long)
floatFLT_MANT_DIG
doubleDBL_MANT_DIG
long doubleLDBL_MANT_DIG

调用示例

#include <iostream>
#include <string>
#include <limits>
#include <cstdint>

struct SName
{
};

//偏特化
struct SPartSpec
{
};

namespace std
{
template<>
struct numeric_limits<SPartSpec>
{
    static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;
    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;
    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;
    static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;
    static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;
    static _GLIBCXX_USE_CONSTEXPR int  digits           = CHAR_BIT;
};
}

int main()
{
    std::cout << std::boolalpha;
    std::cout << "std::numeric_limits<bool>::digits:                 "
              << std::numeric_limits<bool>::digits << std::endl;
    std::cout << "std::numeric_limits<char>::digits:                 "
              << std::numeric_limits<char>::digits << std::endl;
    std::cout << "std::numeric_limits<signed char>::digits:          "
              << std::numeric_limits<signed char>::digits << std::endl;
    std::cout << "std::numeric_limits<unsigned char>::digits:        "
              << std::numeric_limits<unsigned char>::digits << std::endl;
    std::cout << "std::numeric_limits<wchar_t>::digits:              "
              << std::numeric_limits<wchar_t>::digits << std::endl;
    std::cout << "std::numeric_limits<char16_t>::digits:             "
              << std::numeric_limits<char16_t>::digits << std::endl;
    std::cout << "std::numeric_limits<char32_t>::digits:             "
              << std::numeric_limits<char32_t>::digits << std::endl;
    std::cout << "std::numeric_limits<short>::digits:                "
              << std::numeric_limits<short>::digits << std::endl;
    std::cout << "std::numeric_limits<unsigned short>::digits:       "
              << std::numeric_limits<unsigned short>::digits << std::endl;
    std::cout << "std::numeric_limits<int>::digits:                  "
              << std::numeric_limits<int>::digits << std::endl;
    std::cout << "std::numeric_limits<unsigned int>::digits:         "
              << std::numeric_limits<unsigned int>::digits << std::endl;
    std::cout << "std::numeric_limits<long>::digits:                 "
              << std::numeric_limits<long>::digits << std::endl;
    std::cout << "std::numeric_limits<unsigned long>::digits:        "
              << std::numeric_limits<unsigned long>::digits << std::endl;
    std::cout << "std::numeric_limits<long long>::digits:            "
              << std::numeric_limits<long long>::digits << std::endl;
    std::cout << "std::numeric_limits<unsigned long long>::digits:   "
              << std::numeric_limits<unsigned long long>::digits << std::endl;
    std::cout << "std::numeric_limits<float>::digits:                "
              << std::numeric_limits<float>::digits << std::endl;
    std::cout << "std::numeric_limits<double>::digits:               "
              << std::numeric_limits<double>::digits << std::endl;
    std::cout << "std::numeric_limits<long double>::digits:          "
              << std::numeric_limits<long double>::digits << std::endl;
    std::cout << "std::numeric_limits<std::string>::digits:          "
              << std::numeric_limits<std::string>::digits << std::endl;
    std::cout << "std::numeric_limits<SName>::digits:                "
              << std::numeric_limits<SName>::digits << std::endl;
    std::cout << "std::numeric_limits<SPartSpec>::digits:            "
              << std::numeric_limits<SPartSpec>::digits << std::endl;
    return 0;
}

int is_modulo()
{
    std::cout << std::boolalpha;
    std::cout << "std::numeric_limits<bool>::is_modulo:                 "
              << std::numeric_limits<bool>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char>::is_modulo:                 "
              << std::numeric_limits<char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<signed char>::is_modulo:          "
              << std::numeric_limits<signed char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned char>::is_modulo:        "
              << std::numeric_limits<unsigned char>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<wchar_t>::is_modulo:              "
              << std::numeric_limits<wchar_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char16_t>::is_modulo:             "
              << std::numeric_limits<char16_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<char32_t>::is_modulo:             "
              << std::numeric_limits<char32_t>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<short>::is_modulo:                "
              << std::numeric_limits<short>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned short>::is_modulo:       "
              << std::numeric_limits<unsigned short>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<int>::is_modulo:                  "
              << std::numeric_limits<int>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned int>::is_modulo:         "
              << std::numeric_limits<unsigned int>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long>::is_modulo:                 "
              << std::numeric_limits<long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned long>::is_modulo:        "
              << std::numeric_limits<unsigned long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long long>::is_modulo:            "
              << std::numeric_limits<long long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<unsigned long long>::is_modulo:   "
              << std::numeric_limits<unsigned long long>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<float>::is_modulo:                "
              << std::numeric_limits<float>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<double>::is_modulo:               "
              << std::numeric_limits<double>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<long double>::is_modulo:          "
              << std::numeric_limits<long double>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<std::string>::is_modulo:          "
              << std::numeric_limits<std::string>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<SName>::is_modulo:                "
              << std::numeric_limits<SName>::is_modulo << std::endl;
    std::cout << "std::numeric_limits<SPartSpec>::is_modulo:            "
              << std::numeric_limits<SPartSpec>::is_modulo << std::endl;
    return 0;
}

输出

能无更改地表示的十进制位数

std::numeric_limits<T>::digits10

static const int digits10;

(C++11 前)

static constexpr int digits10

(C++11 起)

std::numeric_limits<T>::digits10 的值是类型 T 能无更改地表示的底 10 位数,即任何拥有这么多十进制有效数字的数能转换成 T 的值并转换回十进制形式,而不因舍入或上溢而更改。对于底 radix 类型,它是 digits (对于浮点类型是 digits-1 )的值乘 log
10(radix) 并向下取整。

标准特化

Tstd::numeric_limits<T>::digits10 的值
/* non-specialized */​0​
bool​0​
charstd::numeric_limits<char>::digits * std::log10(2)
signed charstd::numeric_limits<signed char>::digits * std::log10(2)
unsigned charstd::numeric_limits<unsigned char>::digits * std::log10(2)
wchar_tstd::numeric_limits<wchar_t>::digits * std::log10(2)
char8_tstd::numeric_limits<char8_t>::digits * std::log10(2)
char16_tstd::numeric_limits<char16_t>::digits * std::log10(2)
char32_tstd::numeric_limits<char32_t>::digits * std::log10(2)
shortstd::numeric_limits<short>::digits * std::log10(2)
unsigned shortstd::numeric_limits<unsigned short>::digits * std::log10(2)
intstd::numeric_limits<int>::digits * std::log10(2)
unsigned intstd::numeric_limits<unsigned int>::digits * std::log10(2)
longstd::numeric_limits<long>::digits * std::log10(2)
unsigned longstd::numeric_limits<unsigned long>::digits * std::log10(2)
long longstd::numeric_limits<long long>::digits * std::log10(2)
unsigned long longstd::numeric_limits<unsigned long long>::digits * std::log10(2)
floatFLT_DIG /* IEEE float 为 6 */
doubleDBL_DIG /* IEEE double 为 15 */
long doubleLDBL_DIG /* 80 位 Intel long double 为 18 */

示例

8 位二进制类型能准确表示任何二位十进制数,但不能表示 3 位十进制数 256..999 。 digits10 对 8 位类型的值是 2 ( 8 * std::log10(2) 为 2.41 )

标准 32 位 IEEE 754 浮点类型拥有 24 位小数部分(写出 23 位,隐含一位),这可以建议它能表示 7 位十进制数字( 24 * std::log10(2) 为 7.22 ),但相对误差不统一,且一些有 7 位十进制数的浮点值不能在转换到 32 位浮点再转换回来后生存:最小的正数例子是 8.589973e9 ,它在来回舍入后变成 8.589974e9 。这些误差在表示中不能超过一位,而 digits10 按 (24-1)*std::log10(2) 计算,即 6.92 。向下取整结果导致值 6 。

类似地,16 字符串 9007199254740993 在文本->double->文本回环中不保持,它变为 9007199254740992 : 64 位 IEEE 754 double 类型仅保证 15 位的舍入回环。

调用示例

#include <iostream>
#include <string>
#include <limits>
#include <cstdint>

struct SName
{
};

//偏特化
struct SPartSpec
{
};

namespace std
{
template<>
struct numeric_limits<SPartSpec>
{
    static _GLIBCXX_USE_CONSTEXPR bool is_specialized   = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_signed        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_integer       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_exact         = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_infinity     = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN    = true;
    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = true;
    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm     = denorm_present;
    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss  = true;
    static _GLIBCXX_USE_CONSTEXPR float_round_style round_style     = round_toward_neg_infinity;
    static _GLIBCXX_USE_CONSTEXPR bool is_iec559        = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_bounded       = true;
    static _GLIBCXX_USE_CONSTEXPR bool is_modulo        = true;
    static _GLIBCXX_USE_CONSTEXPR int  digits           = CHAR_BIT;
    static _GLIBCXX_USE_CONSTEXPR int  digits10         = CHAR_BIT;
};
}

int main()
{
    std::cout << std::boolalpha;
    std::cout << "std::numeric_limits<bool>::digits10:                 "
              << std::numeric_limits<bool>::digits10 << std::endl;
    std::cout << "std::numeric_limits<char>::digits10:                 "
              << std::numeric_limits<char>::digits10 << std::endl;
    std::cout << "std::numeric_limits<signed char>::digits10:          "
              << std::numeric_limits<signed char>::digits10 << std::endl;
    std::cout << "std::numeric_limits<unsigned char>::digits10:        "
              << std::numeric_limits<unsigned char>::digits10 << std::endl;
    std::cout << "std::numeric_limits<wchar_t>::digits10:              "
              << std::numeric_limits<wchar_t>::digits10 << std::endl;
    std::cout << "std::numeric_limits<char16_t>::digits10:             "
              << std::numeric_limits<char16_t>::digits10 << std::endl;
    std::cout << "std::numeric_limits<char32_t>::digits10:             "
              << std::numeric_limits<char32_t>::digits10 << std::endl;
    std::cout << "std::numeric_limits<short>::digits10:                "
              << std::numeric_limits<short>::digits10 << std::endl;
    std::cout << "std::numeric_limits<unsigned short>::digits10:       "
              << std::numeric_limits<unsigned short>::digits10 << std::endl;
    std::cout << "std::numeric_limits<int>::digits10:                  "
              << std::numeric_limits<int>::digits10 << std::endl;
    std::cout << "std::numeric_limits<unsigned int>::digits10:         "
              << std::numeric_limits<unsigned int>::digits10 << std::endl;
    std::cout << "std::numeric_limits<long>::digits10:                 "
              << std::numeric_limits<long>::digits10 << std::endl;
    std::cout << "std::numeric_limits<unsigned long>::digits10:        "
              << std::numeric_limits<unsigned long>::digits10 << std::endl;
    std::cout << "std::numeric_limits<long long>::digits10:            "
              << std::numeric_limits<long long>::digits10 << std::endl;
    std::cout << "std::numeric_limits<unsigned long long>::digits10:   "
              << std::numeric_limits<unsigned long long>::digits10 << std::endl;
    std::cout << "std::numeric_limits<float>::digits10:                "
              << std::numeric_limits<float>::digits10 << std::endl;
    std::cout << "std::numeric_limits<double>::digits10:               "
              << std::numeric_limits<double>::digits10 << std::endl;
    std::cout << "std::numeric_limits<long double>::digits10:          "
              << std::numeric_limits<long double>::digits10 << std::endl;
    std::cout << "std::numeric_limits<std::string>::digits10:          "
              << std::numeric_limits<std::string>::digits10 << std::endl;
    std::cout << "std::numeric_limits<SName>::digits10:                "
              << std::numeric_limits<SName>::digits10 << std::endl;
    std::cout << "std::numeric_limits<SPartSpec>::digits10:            "
              << std::numeric_limits<SPartSpec>::digits10 << std::endl;
    return 0;
}

输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Appium自动化测试框架:关键字驱动+数据驱动

1. 关键字驱动框架简介 原理及特点 关键字驱动测试是数据驱动测试的一种改进类型&#xff0c;它也被称为表格驱动测试或者基于动作字的测试。主要关键字包括三类&#xff1a;被操作对象&#xff08;Item&#xff09;、操作行为&#xff08;Operation&#xff09;和操作值&…

[python 刷题] 239 Sliding Window Maximum

[python 刷题] 239 Sliding Window Maximum 题目&#xff1a; You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each ti…

抖音直播招聘小程序可以增加职位展示,提升转化率,增加曝光度

抖音直播招聘报白是指进入抖音的白名单&#xff0c;允许在直播间或小视频中发布招聘或找工作等关键词。否则会断播、不推流、限流。抖音已成为短视频流量最大的平台&#xff0c;但招聘企业数量较少。抖音招聘的优势在于职位以视频、直播方式展示&#xff0c;留存联系方式更加精…

C语言 位操作

定义 位操作提高程序运行效率&#xff0c;减少除法和取模的运算。在计算机程序中&#xff0c;数据的位是可以操作的最小数据单位&#xff0c;理论上可以用“位运算”来完成所有的运算和操作。 左移 后空缺自动补0 右移 分为逻辑右移和算数右移 逻辑右移 不管什么类型&am…

基于PySide6的数据处理及可视化分析软件开发

基于PySide6的数据处理及可视化分析软件开发 前言 前言 絮絮叨叨&#xff1a;最近也是在实验室摸鱼&#x1f41f;的日子&#xff0c;先来占个坑位吧。最近在开发一款PC端的软件&#xff0c;打算用于我的毕业设计的最后一章。本来想用新学的框架React来作项目的前端框架&#x…

opencv定位图片中的图案?

import cv2 as cv2def find_positions(image_path, small_image_path):# 读取大图和小图large_image cv2.imread(image_path)small_image cv2.imread(small_image_path)# 小图规格small_image_h, small_image_w small_image.shape[:2]# 对比大图与小图# 匹配模板res cv2.ma…

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中&#xff0c;并例化。 优先编码器Ⅰ的代码如下&#xff1a; module encoder_83(input [7:0] I ,input …

PicGo+Gitee+Typora搭建云图床

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

Redis根据中心点坐标和半径筛选符合的数据

目录 1.启动Redis​编辑 2.导入maven依赖 3.添加redis配置 4.编写RedisService 5.使用 6.验证 1.启动Redis 2.导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifac…

软件UI自动化测试应该怎么做?对软件产品起到什么作用?

在软件开发过程中&#xff0c;开发人员需要编写大量的代码来实现软件产品的功能。而这些功能往往需要在用户界面上进行展示和操作&#xff0c;称为UI(User Interface)。UI自动化测试是为了检测软件界面是否符合预期的设计和用户操作&#xff0c;通过自动化测试工具和脚本&#…

React之setState

一、useState使用规则 1、useState 函数可以执行多次&#xff0c;每次执行互相独立&#xff0c;每调用一次为函数组件提供一个状态 2、useState只能出现在【函数组件】或者其他hook函数中 3、不能嵌套在if/for/其它函数中&#xff08;react按照hooks的调用顺序识别每一个hook&…

软件开发人员 Kubernetes 入门指南|Part 2

在第 1 部分中&#xff0c;我们讲解了 Kubernetes 的核心组件&#xff0c;Kubernetes 是一种开源容器编排器&#xff0c;用于在分布式环境中部署和扩展应用程序&#xff1b;我们还讲解了如何在集群中部署一个简单的应用程序&#xff0c;然后更改其副本数量以扩大或缩小其规模。…

本地生活将成快手新的营收增长点

监制 | 何玺 排版 | 叶媛 快手本地生活开始强化B端市场。 据了解&#xff0c;快手 “本地商家”APP已经正式上线。这是快手为本地生活商家推出的独立工作平台&#xff0c;有助于商家提升经营效率。 新APP的上线&#xff0c;标志着快手本地生活业务布局&#xff0c;正从过去侧…

基于Java的宠物领养管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建 1 安装DOSBox2 安装MASM3 编译测试代码4 运行测试代码5 调试测试代码 本文属于《 X86指令基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 安装DOSBox 下载DOSBox和MASM&#xff1a;https://download.csdn.net/download/u011832525/884180…

5.(vue3.x+vite)v-if与v-show区别

前端技术社区总目录(订阅之前请先查看该博客) 1:效果预览 2:v-if与v-show区别 1、v-if会增删DOM元素。 2、v-show比v-if性能更高,因为v-show只能动态的改变样式(display),不需要增删DOM元素。 3、v-if切换时候回实时的销毁和重建内部的事件、钩子函数等,v-show只会…

如何快速区分GPT-3.5 与GPT-4?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

数学建模——人工神经网络模型

一、人工神经网络简介 1、神经网络起源与应用 1943年心理学家McCulloch和数学家Pitts提出神经元生物数学模型&#xff08;M-P模型&#xff09;&#xff0c;后来人工神经网络(Artifical Neural Network,ANN)是在生物神经网络(Biological Neural Network,BNN)基础上发展起来的&a…

Linux信号 signal()编程

在Linux的进程间通信中可以用signal&#xff08;&#xff09;函数进行信号与信息传递。 1.信号 信号的名字和编号&#xff1a; 每个信号都有一个名字和编号&#xff0c;这些名字都以“SIG”开头&#xff0c;例如“SIGIO ”、“SIGCHLD”等等。 信号定义在signal.h头文件中&am…

win10电脑插入耳机,右边耳机声音比左边小很多

最近使用笔记本看视频&#xff0c;发现插入耳机&#xff08;插入式和头戴式&#xff09;后&#xff0c;右边耳机声音比左边耳机声音小很多很多&#xff0c;几乎是一边很清晰&#xff0c;另一边什么都听不到。 将耳机插到别人电脑上测试耳机正常&#xff0c;那就是电脑的问题。试…