intx_t、size_t、ssize_t、无穷大表示 与 数组清零

1 int_t 是结构的标注,相当于type/typedef的缩写

名字结果范围
int8_ttypedef signed char-128 ~ 127
uint8_ttypedef unsigned char0 ~ 255
int16_ttypedef signed short-32768 ~ 32,767
uint16_ttypedef unsigned short0 ~ 65535
int32_ttypedef signed int-2147483648 ~ 2147483647
uint32_ttypedef unsigned int;0 ~ 4294967295
int64_ttypedef signed long long-9223372036854775808 ~ 9223372036854775807
uint64_ttypedef unsigned long long0 ~ 18446744073709551615

即:
int8_t = signed char
uint8_t = unsigned char
int16_t = signed short
uint16_t = unsigned short
int32_t = signed int
uint32_t = unsigned int
int64_t = signed long long
uint64_t = unsigned long long

注意

有些编译器可能不能运行int_t,还是老老实实写全称吧!

2 size_t 与 ssize_t

size_t用于计数,如sizeof函数返回值类型即为size_t。
不同位的机器中所占位数也不同
size_t是无符号数,ssize_t是有符号数。

当变量有可能为负数时,必须使用ssize_t

3 无穷大 与 数组清零memset

参见:https://blog.csdn.net/qq_40893824/article/details/105753917

INF = 0x7fffffff 不是一个好办法,因为INF+INF此时会溢出!
const int64_t INF = 0x3f3f3f3f;
它的十进制是1061109567,是10^9级别的
非常nice
此时理由如下:

  1. INF+INF不溢出
    0x3f3f3f3f + 0x3f3f3f3f=2122219134
  2. 数组清零:memset(a,0,sizeof(a)):方便高效,但将某个数组全赋值为无穷大时,就不能使用memset函数而得自己写循环了;
    memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0(只有赋值为-1和0的时候才使用它)
    现在,无穷大设为0x3f3f3f3f,它的每个字节都是0x3f!(16进制数3F)
    所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。

3.1 malloc VS calloc

形式上:

	char *str = (char *) malloc(length*sizeof(char));
	char *str = (char *) calloc(length + 1, sizeof(char));

初始化内存空间的区别:
malloc:不能初始化 分配的内存,动态分度配内存后,里边数据是随机的垃圾数据
calloc:初始化 分配的内存,动态分配内存后,自动初始化内存空间为零

4 long long mod = 1e9 + 7

大佬的代码中经常出现这个数来表示一个特别大的数
好处如下:(原文章

  1. 这是一个大的质数(或叫素数)
  2. 1e9+7相加不爆int,相乘不爆long long
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_1403034144

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

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

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

打赏作者

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

抵扣说明:

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

余额充值