相关疑难解决方法(0)

为什么处理排序数组比处理未排序数组更快?

这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster.
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance branch-prediction

2万
推荐指数
27
解决办法
142万
查看次数

什么是按位移位(位移)运算符以及它们如何工作?

我一直在尝试在业余时间学习C语言,其他语言(C#,Java等)具有相同的概念(通常是相同的运算符)......

我想知道是,在核心层,是什么位移(<<,>>,>>>)这样做,可以帮助它什么问题解决,和周围的弯曲什么潜伏的陷阱?换句话说,一个绝对的初学者指导比特移位的所有优点.

bit-manipulation binary-operators operators bit-shift

1340
推荐指数
9
解决办法
67万
查看次数

枚举上最常见的C#按位操作

对于我的生活,我不记得如何设置,删除,切换或测试位域中的位.要么我不确定,要么混淆它们,因为我很少需要这些.因此,"比特作弊表"会很好.

例如:

flags = flags | FlagsEnum.Bit4;  // Set bit 4.
Run Code Online (Sandbox Code Playgroud)

要么

if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way?
Run Code Online (Sandbox Code Playgroud)

您能举例说明所有其他常见操作,最好是使用[Flags]枚举的C#语法吗?

.net c# enums flags bit-manipulation

197
推荐指数
9
解决办法
16万
查看次数

什么是位屏蔽?

我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.

c terminology bit-manipulation bitmask bitwise-operators

162
推荐指数
2
解决办法
24万
查看次数

^ = 32背后的想法是什么,将小写字母转换为高位字母,反之亦然?

我在解决代码问题上遇到了一些问题.通常我首先检查字符是英文字母的上部还是下部,然后减去或添加32以将其转换为相应的字母.但我发现有人^= 32做了同样的事情.这里是:

char foo = 'a';
foo ^= 32;
char bar = 'A';
bar ^= 32;
cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a
Run Code Online (Sandbox Code Playgroud)

我已经搜索了这方面的解释并没有找到答案.那么为什么会这样呢?

c++ ascii bit-manipulation

146
推荐指数
10
解决办法
2万
查看次数

如何删除C中的标志?

有一个变量,它包含一些标志,我想删除其中一个.但我不知道如何删除它.

这是我如何设置标志.

my.emask |= ENABLE_SHOOT;
Run Code Online (Sandbox Code Playgroud)

c flags bit-manipulation

142
推荐指数
3
解决办法
8万
查看次数

您是否曾经不得不在实际项目中使用位移?

您是否曾经在实际编程项目中使用位移?大多数(如果不是全部)高级语言都有移位运算符,但什么时候你真的需要使用它们?

bit-manipulation bit-shift

79
推荐指数
8
解决办法
3万
查看次数

在字节中设置特定位

我正在尝试在Java字节变量中设置位.它确实提供了类似的方法.setBit(i).有谁知道我怎么能意识到这一点?

我可以通过给定的字节逐位迭代:

if( (my_byte & (1 << i)) == 0 ){

}
Run Code Online (Sandbox Code Playgroud)

但是我不能把这个位置设置为1或0,可以吗?

java byte bit-manipulation

78
推荐指数
5
解决办法
7万
查看次数

C中的位域操作

在C中用单位测试和设置单个位的经典问题可能是最常见的中级编程技能之一.您可以使用简单的位掩码进行设置和测试

unsigned int mask = 1<<11;

if (value & mask) {....} // Test for the bit
value |= mask;    // set the bit
value &= ~mask;   // clear the bit
Run Code Online (Sandbox Code Playgroud)

一篇有趣的博客文章认为,这容易出错,难以维护,而且做法不佳.C语言本身提供了类型安全和可移植的位级访问:

typedef unsigned int boolean_t;
#define FALSE 0
#define TRUE !FALSE
typedef union {
        struct {
                boolean_t user:1;
                boolean_t zero:1;
                boolean_t force:1;
                int :28;                /* unused */
                boolean_t compat:1;     /* bit 31 */
        };
        int raw;
} flags_t;

int
create_object(flags_t flags)
{
        boolean_t is_compat = flags.compat;

        if (is_compat) …
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

46
推荐指数
11
解决办法
5万
查看次数

如何在C/C++中读/写任意位

假设我有一个二进制值为11111111的字节b

例如,我如何读取从第二位开始的3位整数值或从第五位开始写入4位整数值?

c c++ memory read-write bit

36
推荐指数
4
解决办法
9万
查看次数