标签: bit-manipulation

右移无符号字符是否填充了字符?

在我的系统上,(unsigned char) -1是(预计为 8 位字符) 1111 1111 二进制(255 十进制)。

同样,(unsigned char) -1 >> 1正如预期的 0111 1111。左边填充了一个零。

~((unsigned char) -1 >> 1) 正如预期的那样,是 1000 0000。

现在我想生成 unsigned char 0010 0000 例如。

我试过了~((unsigned char) -1 >> 1) >> 2,但这输出 1110 0000 .... 什么?为什么左边突然被填满了?


如何生成unsigned char启用第 n 位(从左侧)的 ?

我想

n   unsigned char
0   1000 0000
1   0100 0000
2   0010 0000
3   0001 0000
... 
7   0000 0001
Run Code Online (Sandbox Code Playgroud)

此刻,~((unsigned char) -1 >> 1) …

c c++ bit-manipulation bit-shift bitwise-operators

-1
推荐指数
1
解决办法
75
查看次数

如何用另一个数字的位按位替换一个数字中的一系列位以进行递增,而不影响低位?

我有一个 16 位数字,LSB 4 位用作检查设置的位域,MSB 12 位用作number递增的 a。我知道这tempNum = (data_bits >> 4)会让我number摆脱更大的。如果我想将其增加tempNum1,然后将其放回整个 16 位数字作为替换而不影响低 4 位,我将如何进行?我只想使用bitwise操作来做到这一点。

c bit-manipulation bit bitwise-operators

-1
推荐指数
1
解决办法
41
查看次数

为什么 n*(n+1)/2 % 2 在 if 条件下等价于按位运算 (n+1) & 2?

再次更新:抱歉放错了需要登录的链接...你现在可以看到代码了

更新:抱歉误导...已经编辑了标题


有一个问题

将序列划分为1 ... n具有相同总和的 2 个序列,例如...您可以划分[1 2 3 4 5 6 7][1 6 7]and [2 3 4 5],但并非所有从 1 到 n 的序列都可以这样划分,显然如果 1 到 n 的总和,即n*(n+1)/2,如果这value 是奇数,这是不可能的。

但我想知道,为什么条件[n*(n+1)/2 % 2]可以替换为[(n+1) & 2]

我在网站上看到这个

问题网站是:https : //cses.fi/problemset/task/1092

该代码在这里:https : //paste.ubuntu.com/p/GfVG9R67zj/

///2021-06-17 02:21:43  SchizoYoshi C++17   0.10 s
///paste from https://cses.fi/problemset/hack/1092/entry/2352488/
#include <iostream>
auto& c = std::cout;

int main() {
    int n, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm bit-manipulation

-1
推荐指数
1
解决办法
152
查看次数

&amp;~ 是什么意思?

这是什么& ~(minOffsetAlignment - 1)意思?

这是否意味着析构函数的地址?

这是我从中得到的代码片段。

VkDeviceSize 是 uint64_t。

VkDeviceSize getAlignment(VkDeviceSize instanceSize, VkDeviceSize minOffsetAlignment) 
{
    if (minOffsetAlignment > 0) 
    {
        return (instanceSize + minOffsetAlignment - 1) & ~(minOffsetAlignment - 1);
    }
    return instanceSize;
}
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation bitwise-operators

-1
推荐指数
1
解决办法
171
查看次数

为什么它抱怨整数常量对其类型来说太大

我正在编写一个汉明权重计算器,但为什么数字 3 对于 uint32_t 来说太大了?

编写一个函数,它接受一个无符号整数并返回它所具有的“1”位的数量(也称为汉明权重)。

笔记:

请注意,在某些语言(例如 Java)中,没有无符号整数类型。在这种情况下,输入将以有符号整数类型给出。它不应该影响您的实现,因为整数的内部二进制表示形式是相同的,无论是有符号的还是无符号的。

在 Java 中,编译器使用 2 的补码表示法来表示有符号整数。因此,在示例 3 中,输入表示有符号整数。-3。

// package LeetCode Problem.Problem 2;
// Write a function that takes an unsigned integer and returns the number of '1'
// bits it has (also known as the Hamming weight).

#include <iostream>
using namespace std;

int hammingWeight(uint32_t n);

class BitShifting {
 public:
  uint32_t n;
  int hammingWeight(uint32_t n);
  void setn(uint32_t n);
};

void BitShifting::setn(uint32_t n) {
  n = n;
}

int BitShifting::hammingWeight(uint32_t n) {
  int …
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation

-1
推荐指数
1
解决办法
207
查看次数

通过 C 中的按位表示比较 2 个浮点数

我考试时遇到了这个问题,但我无法真正解决它,希望得到一些帮助。

仅填充空白,当且仅当 x<y 时函数必须返回 true。假设 x,y 不能为 NaN(但可以为 +-inf),不允许进行转换,仅使用 ux, uy, sx, sy

bool func(float x, float y) {
    unsigned* uxp = ______________ ;
    unsigned* uyp = ______________ ;
    unsigned  ux  = *uxp;
    unsigned  uy  = *uyp;
    unsigned  sx = (ux>>31); 
    unsigned  sy = (uy>>31);
    return ___________________________;
}
Run Code Online (Sandbox Code Playgroud)

c floating-point unsigned bit-manipulation ieee

-1
推荐指数
1
解决办法
207
查看次数

如何仅使用 C 中的按位运算符来检查值是否大于 7?

对于此问题,如果参数大于 7,则要求返回 1,否则返回 0。

例如,如果 x 为 8,则该函数将返回 1。如果 x 为 7,则该函数将返回 0。

唯一允许的合法运算符是 (! ~ & ^ | + << >>),它禁止使用其他任何运算符,例如 -、for 循环、while 循环、if 语句等。

我们可以假设系统使用 2 的补码和整数的 32 位表示,以算术方式执行右移,并且在将整数移位超过字大小时会出现不可预测的行为。

我知道不使用 - 操作的减法可以用 ~ 来完成,但说实话,我不知道如何从逻辑上思考这个问题。

c bit-manipulation bitwise-operators twos-complement

-1
推荐指数
1
解决办法
540
查看次数

如何切换数字中的所有位?

#include <stdio.h>

int main() {
    int n = 10;
    int ans = n ^ (1 << 2);
    printf("%d", ans);
}
Run Code Online (Sandbox Code Playgroud)

此代码切换特定数字,但我需要整个位来切换示例:10-> 0b1010-> 0b0101->5

c binary bit-manipulation

-1
推荐指数
1
解决办法
704
查看次数

如何在 C 语言中进行按位 XNOR

XNOR我在编写最多包含 7 个~和运算符的按位函数时遇到困难|。例子:bitXnor(6, -5) = 2。如果没有 ,我该如何做到这一点&

到目前为止我有这个:

int bitXnor(int x, int y) {
  return ~(~x | ~y);
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

int bitXnor(int x, int y) {
  return ~(~x | ~y);
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation xor bitwise-xor

-1
推荐指数
1
解决办法
159
查看次数

谁能简化这个按位表达式?

在 C++ 中开发 ECS 实现时,我渴望可以简化这个表达式,但老实说,我对按位运算没有足够的信心来弄清楚:

(x & y) == x
Run Code Online (Sandbox Code Playgroud)

如果您有任何关于简化按位表达式的提示,那就太好了,谢谢

编辑:格式化

c++ bit-manipulation bitwise-operators

-1
推荐指数
1
解决办法
130
查看次数