cin,cout 的箭头等等。
这个帖子不准水楼,务必要求真实。。。
@chen_zhe 有一些题专门卡cin和cout
@root scanf/printf其实不比cin/cout快多少
memset初始化数组注意的地方:
如果是memset(a, 负数, sizeof(a));
那么a数组将全部初始化为你指定的负数。
可如果是memset(a, 正数, sizeof(a));
就不行了……
我做了一个实验:
#include <cstdio> #include <cstring> int a[10]; int main() { memset(a, 1, sizeof(a)); printf("%d", a[1]); }
输出结果很恶心。
但是,memset是内存复制,于是我尝试使用了以十六进制输出a[1](十六进制格式符是%x或%X)
#include <cstdio> #include <cstring> int a[10]; int main() { memset(a, 1, sizeof(a)); printf("%x", a[1]); }
输出结果: 1010101
似乎很有什么规律
把1改成2呢?
#include <cstdio> #include <cstring> int a[10]; int main() { memset(a, 2, sizeof(a)); printf("%x", a[1]); }
输出结果:2020202
改成3呢?3030303
改成4?4040404
于是我尝试了将1、2、3、4改为127
输出不是1270127
而是7f7f7f7f
8位了!
127的十六进制表示就是7f
改成10?
a0a0a0a
10的十六进制表示就是a
改成-1?
fffffff
一脸懵逼 1/10000
输出一下-1的十六进制?
-2的十六进制表示?
ffffffe
哇偶,奇怪
之前看过紫书上说,-n是使用补码表示法表示的,即使用 表示。这下也就解答了为什么int有32位,但是正数却只能表示到2 ^ 31 - 1
但是memset如果把数组初始化为-2,就像这样:
#include <cstdio> #include <cstring> int a[10]; int main() { memset(a, -2, sizeof(a)); printf("%x", a[1]); }
输出是fefefefe,不是fffffffe
这说明,memset的初始化的确是内存复制——是按照二进制来的。至于为什么十六进制能观察出结果,是因为2 ^ 4 = 16
有一天我就为memset废了3小时……
以上全部为本人亲身实验
但如果是longlong,cin和cout比scanf、printf快
数组开里面容易炸掉
数据过大(超过10万以上的数据规模)需要用 scanf / printf,cin 和 cout 会超时!
scanf / printf
cin 和 cout
等号和判等傻傻的分不清?一般来说, if 里面才有 == 判等,其他一般都是赋值 =。
==
=
其实像int using namespace.....这种很好判断,以为如果对了就可以加粗的
循环内部有两条语句以上的,不写{} 包括起来!
{}
数据过大需要用 scanf/printf,cin 和 cout 超时严重!
共 135 条回复
@chen_zhe 有一些题专门卡cin和cout
@root scanf/printf其实不比cin/cout快多少
memset初始化数组注意的地方:
如果是memset(a, 负数, sizeof(a));
那么a数组将全部初始化为你指定的负数。
可如果是memset(a, 正数, sizeof(a));
就不行了……
我做了一个实验:
输出结果很恶心。
但是,memset是内存复制,于是我尝试使用了以十六进制输出a[1](十六进制格式符是%x或%X)
输出结果: 1010101
似乎很有什么规律
把1改成2呢?
输出结果:2020202
改成3呢?3030303
改成4?4040404
于是我尝试了将1、2、3、4改为127
输出不是1270127
而是7f7f7f7f
8位了!
127的十六进制表示就是7f
改成10?
a0a0a0a
10的十六进制表示就是a
改成-1?
fffffff
一脸懵逼 1/10000
输出一下-1的十六进制?
fffffff
-2的十六进制表示?
ffffffe
哇偶,奇怪
之前看过紫书上说,-n是使用补码表示法表示的,即使用 表示。这下也就解答了为什么int有32位,但是正数却只能表示到2 ^ 31 - 1
但是memset如果把数组初始化为-2,就像这样:
输出是fefefefe,不是fffffffe
这说明,memset的初始化的确是内存复制——是按照二进制来的。至于为什么十六进制能观察出结果,是因为2 ^ 4 = 16
有一天我就为memset废了3小时……
以上全部为本人亲身实验
但如果是longlong,cin和cout比scanf、printf快
数组开里面容易炸掉
数据过大(超过10万以上的数据规模)需要用
scanf / printf
,cin 和 cout
会超时!等号和判等傻傻的分不清?一般来说, if 里面才有
==
判等,其他一般都是赋值=
。其实像int using namespace.....这种很好
判断,以为如果对了就可以加粗的循环内部有两条语句以上的,不写
{}
包括起来!数据过大需要用 scanf/printf,cin 和 cout 超时严重!