在我的系统上,(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) …
我有一个 16 位数字,LSB 4 位用作检查设置的位域,MSB 12 位用作number递增的 a。我知道这tempNum = (data_bits >> 4)会让我number摆脱更大的。如果我想将其增加tempNum1,然后将其放回整个 16 位数字作为替换而不影响低 4 位,我将如何进行?我只想使用bitwise操作来做到这一点。
再次更新:抱歉放错了需要登录的链接...你现在可以看到代码了
更新:抱歉误导...已经编辑了标题
有一个问题:
将序列划分为
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) 这是什么& ~(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) 我正在编写一个汉明权重计算器,但为什么数字 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) 我考试时遇到了这个问题,但我无法真正解决它,希望得到一些帮助。
仅填充空白,当且仅当 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) 对于此问题,如果参数大于 7,则要求返回 1,否则返回 0。
例如,如果 x 为 8,则该函数将返回 1。如果 x 为 7,则该函数将返回 0。
唯一允许的合法运算符是 (! ~ & ^ | + << >>),它禁止使用其他任何运算符,例如 -、for 循环、while 循环、if 语句等。
我们可以假设系统使用 2 的补码和整数的 32 位表示,以算术方式执行右移,并且在将整数移位超过字大小时会出现不可预测的行为。
我知道不使用 - 操作的减法可以用 ~ 来完成,但说实话,我不知道如何从逻辑上思考这个问题。
#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
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++ 中开发 ECS 实现时,我渴望可以简化这个表达式,但老实说,我对按位运算没有足够的信心来弄清楚:
(x & y) == x
Run Code Online (Sandbox Code Playgroud)
如果您有任何关于简化按位表达式的提示,那就太好了,谢谢
编辑:格式化