文章目录

  • 前言:测试程序
  • 一、赋极大值
    • 危险赋值法:0x7f or 127
    • 安全赋值法:0x3f or 63
  • 二、赋值为零: 0x00
  • 三、赋为-1:0xff or -1
  • 四、赋极小值
    • 危险赋值法:-0x7f or -127
    • 安全赋值法:-0x3f or -63

前言:测试程序

#define USEFASTERREAD 1 #define rg register
#define inl inline
#define DEBUG printf("[Passing [%s] in line %d.]\n", __func__, __LINE__)
#define putline putchar('\n')
#define putsp putchar(' ')
#define Rep(a, s, t) for(rg int a = s; a <= t; a++)
#define Repdown(a, t, s) for(rg int a = t; a >= s; a--)
typedef long long ll;
#include<cstdio>#if USEFASTERREAD
char In[1 << 20], *ss = In, *tt = In;
#define getchar() (ss == tt && (tt = (ss = In) + fread(In, 1, 1 << 20, stdin), ss == tt) ? EOF : *ss++)
#endif
struct IO {void RS() {freopen("test.in", "r", stdin), freopen("test.out", "w", stdout);} template<typename T> inline IO r(T& x)const  {x = 0; T f = 1; char ch = getchar();for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + int(ch - '0');x *= f; return *this;}template<typename T> inline IO w(T x)const {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) w(x / 10);putchar(x % 10 + '0'); return *this;}template<typename T> inline IO wl(const T& x)const {w(x), putline; return *this;}template<typename T> inline IO ws(const T& x)const {w(x), putsp; return *this;}inline IO l() {putline; return *this;}inline IO s() {putsp; return *this;}
}io;
template<typename T> inline T Max(const T& x, const T& y) {return y < x ? x : y;}
template<typename T> inline T Min(const T& x, const T& y) {return y < x ? y : x;}
template<typename T> inline void Swap(T& x, T& y) {T tmp = x; x = y; y = tmp;}
template<typename T> inline T Abs(const T& x) {return x > 0 ? x : -x;} #include<cstring>
int a[50];
ll b[50];
int main() {//io.RS();memset(a, 0x7f, sizeof a);memset(b, 0x7f, sizeof b);printf("int: \n%d\n%#x\n", a[0], a[0]);printf("ll : \n%lld\n%#llx\n", b[0], b[0]);return 0;
}

每次改变memset第二个参数的值,就可以完成一次测试.

一、赋极大值

一般有两种赋值法

危险赋值法:0x7f or 127

使用memset(a, 0x7f, sizeof a);
memset(a, 127, sizeof a);
得到的结果:

int:
2139062143
0x7f7f7f7f
ll :
9187201950435737471
0x7f7f7f7f7f7f7f7f

显然,这样赋值出来的数值太大,若有两个这样的数相加,就会爆掉当前的类型
一般可以用来求最小值。

安全赋值法:0x3f or 63

使用memset(a, 0x3f, sizeof a);
memset(a, 63, sizeof a);
结果:

int:
1061109567
0x3f3f3f3f
ll :
4557430888798830399
0x3f3f3f3f3f3f3f3f

这样的数,相加不会爆类型,比较安全(当然相乘还是不行)
一般来说,相乘我们要向上推一个类型:
short相乘用int
int相乘用long long
long long相乘用__int128

二、赋值为零: 0x00

很常用的用法
memset(a, 0x00, sizeof a);
或直接memset(a, 0, sizeof a);

得到的结果:

int:
0
0
ll :
0
0

三、赋为-1:0xff or -1

使用memset(a, -1, sizeof a);
memset(a, 0xff, sizeof a);
测试结果:

int:
-1
0xffffffff
ll :
-1
0xffffffffffffffff

四、赋极小值

危险赋值法:-0x7f or -127

使用memset(a, -127, sizeof a);
或者memset(a, -0x7f, sizeof a);
很好记不是吗2333
测试结果:

int:
-2122219135
0x81818181
ll :
-9114861777597660799
0x8181818181818181

同样,相加会爆类型

安全赋值法:-0x3f or -63

使用memset(a, -63, sizeof a);
或者memset(a, -0x3f, sizeof a);
测试结果:

int:
-1044266559
0xc1c1c1c1
ll :
-4485090715960753727
0xc1c1c1c1c1c1c1c1

相加ok!

【测试】cstring头文件中memset的功能相关推荐

  1. C/C++之cstring头文件

    cstring头文件中的函数 类别 函数名 简介 使用 赋值 memset 给数组赋初值 memset(arr,'0',sizeof(arr)) 比较 strcmp 比较两个字符数组 strcmp(a ...

  2. C++头文件中cstring和string的区别

    1.string与cstring有什么区别 是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string的typedef) ...

  3. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

  4. 关于头文件中的 static inline函数

    关于头文件中的 static inline函数 头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-n ...

  5. string和cstring头文件的区别

    1.string与cstring有什么区别 <string>是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_s ...

  6. #ifndef 在头文件中的作用

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量"重定义"的错误.在头文件中实用#ifndef #define #e ...

  7. 能否用痰盂盛饭——谈谈在头文件中定义外部变量

    能否用痰盂盛饭--谈谈在头文件中定义外部变量 - garbageMan - 博客园 能否用痰盂盛饭--谈谈在头文件中定义外部变量 "能否用痰盂盛饭"并非是一个技术问题,而是一个哲学 ...

  8. [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法

    想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...

  9. 头文件中能否进行函数的定义

    通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义 我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和 ...

最新文章

  1. rstudio怎么安装ggplot2_如何基于ggplot2构建相关系数矩阵热图
  2. python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
  3. [BUUCTF-pwn]——wdb_2018_2nd_easyfmt
  4. 从生态、标准、应用看中国开源 30 年!
  5. mysql原生sql语句_原生SQL语句
  6. 《快速开发》通过Maven创建WebService项目Hello World!
  7. java 中阶乘如何表示_Java阶乘实例
  8. 网络层传输协议(详解)
  9. 股票 - - 常用指标【上】
  10. CentOS 7 忘记root密码重置密码
  11. 第26章 SpringMVC中基于注解的Controller(一)
  12. 威5创非凡,领航再出击 | 新华三集团成立五周年庆
  13. logback.xml和日志输入格式说明
  14. excel sumifs()对多列求和
  15. Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置
  16. pandas 取excel 中的某一列_干货Python Pandas 做数据分析之玩转 Excel 报表分析
  17. iOS音视频开发八:视频编码,H.264 和 H.265 都支持
  18. 从零开始学架构——异地多活架构
  19. 第一次去中关村图书大厦
  20. [案例4-2]饲养员喂养动物

热门文章

  1. 1049 最后一块石头的重量 II(零一背包问题)
  2. “海星通”软件许可使用协议
  3. android设计指南非官方中文版(apkbus)
  4. (素材源码) 猫猫学iOS 之UIDynamic重力、弹性碰撞吸附等现象PS有惊喜
  5. 李宏毅-2023春机器学习 ML2023 SPRING-学习笔记:3/24机器如何生成图像
  6. Chromium 最新渲染引擎--RenderingNG
  7. 统计学--基于R(第3版)(基于R应用的统计学丛书)作者:贾俊平 习题答案 第二章
  8. [Error]Swift开发调试时使用LLDB的po和print命令无法输出变量
  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利...
  10. FQDN与域名的区别