草庐IT

c++ - 我是否需要 64 位处理器才能使用 64 位数据类型

我有几个问题:是否需要64位处理器才能使用64位数据类型(__int64或int64_t)?int64_t的“t”是什么意思?从GCC和VCC的哪个版本开始支持数据类型?是64位数据类型只是将数据长度增加了一倍还是还有其他一些事情在幕后发生? 最佳答案 您不需要64位处理器来使用64位数据类型。这一切都取决于编译器,并且仅取决于编译器。如果需要,编译器可以为您提供128位、237位或803位数据类型。但是,请记住,通常32位CPU不能直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库。编译器必须生成或多或

c++ - 我是否需要 64 位处理器才能使用 64 位数据类型

我有几个问题:是否需要64位处理器才能使用64位数据类型(__int64或int64_t)?int64_t的“t”是什么意思?从GCC和VCC的哪个版本开始支持数据类型?是64位数据类型只是将数据长度增加了一倍还是还有其他一些事情在幕后发生? 最佳答案 您不需要64位处理器来使用64位数据类型。这一切都取决于编译器,并且仅取决于编译器。如果需要,编译器可以为您提供128位、237位或803位数据类型。但是,请记住,通常32位CPU不能直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库。编译器必须生成或多或

c - 我怎样才能优化这个计算? (x^a + y^a +z^a)^(1/a)

如标题所示。我需要做很多这样的计算:re=(x^a+y^a+z^a)^(1/a).其中{x,y,z}>=0。更具体地说,a是正数浮点常数,x、y、z为float。^是一个求幂运算符。目前,我不想使用SIMD,但希望有其他技巧来加快速度。staticvoidheavy_load(void){staticstructxyz_t{floatx,y,z;};structxyz_txyzs[10000];floatre[10000]={.0f};constfloata=0.2;/*herefillxyzsusingsomerandompositivefloatingpointvalues*/fo

c - 我怎样才能优化这个计算? (x^a + y^a +z^a)^(1/a)

如标题所示。我需要做很多这样的计算:re=(x^a+y^a+z^a)^(1/a).其中{x,y,z}>=0。更具体地说,a是正数浮点常数,x、y、z为float。^是一个求幂运算符。目前,我不想使用SIMD,但希望有其他技巧来加快速度。staticvoidheavy_load(void){staticstructxyz_t{floatx,y,z;};structxyz_txyzs[10000];floatre[10000]={.0f};constfloata=0.2;/*herefillxyzsusingsomerandompositivefloatingpointvalues*/fo

c++ - 我怎样才能有效地洗牌?

我需要对一个16位无符号整数进行洗牌,使偶数索引位于低字节,奇数索引位于高字节。input:fedcba9876543210(contiguouslynumbered)output:fdb97531eca86420(evenandoddseparated)我的代码现在是这样的:typedefunsignedshortu16;u16segregate(u16x){u16g=(x&0x0001);u16h=(x&0x0004)>>1;u16i=(x&0x0010)>>2;u16j=(x&0x0040)>>3;u16k=(x&0x0100)>>4;u16l=(x&0x0400)>>5;u16

c++ - 我怎样才能有效地洗牌?

我需要对一个16位无符号整数进行洗牌,使偶数索引位于低字节,奇数索引位于高字节。input:fedcba9876543210(contiguouslynumbered)output:fdb97531eca86420(evenandoddseparated)我的代码现在是这样的:typedefunsignedshortu16;u16segregate(u16x){u16g=(x&0x0001);u16h=(x&0x0004)>>1;u16i=(x&0x0010)>>2;u16j=(x&0x0040)>>3;u16k=(x&0x0100)>>4;u16l=(x&0x0400)>>5;u16

c++ - 我怎样才能明智地重载放置运算符 new?

C++允许重载operatornew-全局和每个类-通常的operatornew、operatornew[]与一起使用new[]语句和放置operatornew分开。这三个中的前两个通常因使用自定义分配器和添加跟踪而被重载。但是放置operatornew似乎很简单——它实际上在内部什么都不做。例如,在VisualC++中,默认实现只返回传递给调用的地址://fromnew.hinlinevoid*operatornew(size_t,void*where){returnwhere;}它还能做什么?为什么以及如何合理地重载放置operatornew? 最佳答案

c++ - 我怎样才能明智地重载放置运算符 new?

C++允许重载operatornew-全局和每个类-通常的operatornew、operatornew[]与一起使用new[]语句和放置operatornew分开。这三个中的前两个通常因使用自定义分配器和添加跟踪而被重载。但是放置operatornew似乎很简单——它实际上在内部什么都不做。例如,在VisualC++中,默认实现只返回传递给调用的地址://fromnew.hinlinevoid*operatornew(size_t,void*where){returnwhere;}它还能做什么?为什么以及如何合理地重载放置operatornew? 最佳答案

c++ - 为什么 (false?A() :B()). test() 只有 A 和 B 有子类关系时才能编译?

原来我喜欢用这样的东西:(true?a:b).test()而不是(true?a.test():b.test())如果函数名称相同,为了节省打字时间,最初我认为它应该是有效的,但我发现:#includeclassA{public:chartest(){return'A';}};classB{public:chartest(){return'B';}};intmain(){printf("%c\n",(false?A():B()).test());return0;}无法编译,但如果B是A的子类:#includeclassA{public:chartest(){return'A';}};cl

c++ - 为什么 (false?A() :B()). test() 只有 A 和 B 有子类关系时才能编译?

原来我喜欢用这样的东西:(true?a:b).test()而不是(true?a.test():b.test())如果函数名称相同,为了节省打字时间,最初我认为它应该是有效的,但我发现:#includeclassA{public:chartest(){return'A';}};classB{public:chartest(){return'B';}};intmain(){printf("%c\n",(false?A():B()).test());return0;}无法编译,但如果B是A的子类:#includeclassA{public:chartest(){return'A';}};cl