相关疑难解决方法(0)

g ++和gcc有什么区别?

g ++和gcc有什么区别?哪些应该用于一般的c ++开发?

c++ gcc g++

816
推荐指数
8
解决办法
43万
查看次数

为什么 C++ 中 `printf("%llu\n", 1ull << n);` 和 `printf("%llu\n", 1ull << 64);` 的输出不同?(n=64)

为什么C++中printf("%llu\n", 1ull << n);和的输出printf("%llu\n", 1ull << 64);不同?

代码:

#include <cstdio>

int main()
{
    int n = 64;
    printf("%llu\n", 1ull << n);
    printf("%llu\n", 1ull << 64);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
0
Run Code Online (Sandbox Code Playgroud)

c c++ bit-shift undefined-behavior

7
推荐指数
2
解决办法
227
查看次数

是移位std :: bitset <N>多于N位置未定义的行为?

如果计数大于类型的宽度,如右移未定义行为中所讨论的那样如果位移数超过有效操作数大小,则移位值是不确定的.

因此,在下面,值bar是未定义的:

uint32_t foo = 123;
uint32_t bar = (foo >> 33);
Run Code Online (Sandbox Code Playgroud)

这种轮班操作是否定义明确std::bitset?如:

std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
Run Code Online (Sandbox Code Playgroud)

我可以在哪个官方文件中找到这样的信息?

该案例未在cppreference上明确说明(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt).

c++ bit-shift language-lawyer c++11 c++14

4
推荐指数
1
解决办法
110
查看次数

c ++ - 警告:右移计数> = 32位机器上的类型宽度

我有以下功能:

void func(unsigned long v)
{
  char max_byte = 0xFF;
  char buffer[8];

  buffer[0] = static_cast<char>((v)       & max_byte);
  buffer[1] = static_cast<char>((v >> 8)  & max_byte);
  buffer[2] = static_cast<char>((v >> 16) & max_byte);
  buffer[3] = static_cast<char>((v >> 24) & max_byte);
  buffer[4] = static_cast<char>((v >> 32) & max_byte);
  buffer[5] = static_cast<char>((v >> 40) & max_byte);
  buffer[6] = static_cast<char>((v >> 48) & max_byte);
  buffer[7] = static_cast<char>((v >> 56) & max_byte);
}
Run Code Online (Sandbox Code Playgroud)

它接受一个unsigned long参数并将其8个字节插入char缓冲区(不要试图找出原因.它是一个有意义的函数的简洁版本).

此代码在64位上编译良好,但在32位上我得到以下警告:

warning: right shift count >= width …
Run Code Online (Sandbox Code Playgroud)

c++ bit-shift 32bit-64bit unsigned-integer

3
推荐指数
2
解决办法
5465
查看次数

你为什么不能移动uint16_t

我正在尝试通过组合16位和8位值来填充64位无符号变量:

uint8_t byte0 = 0x00;
uint8_t byte1 = 0xAA;
uint8_t byte2 = 0x00;
uint8_t byte3 = 0xAA;

uint16_t hword0 = 0xAA00;
uint16_t hword1 = 0xAAAA;

uint64_t result = ( hword0 << 32 ) + ( byte3 << 24 ) + 
                  ( byte2 << 16 ) + ( byte1 << 8 ) + ( byte0 << 0  );
Run Code Online (Sandbox Code Playgroud)

这给了我一个警告。

 left shift count >= width of type [-Wshift-count-overflow]
 uint64_t result = ( hword0 << 32 )
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation bit-shift shift

2
推荐指数
2
解决办法
1086
查看次数

为什么3 &gt;&gt; 32等于3?

为什么3右移32等于3而不是0。

我在nodeJs和Java中得到了这些结果

  • 3 >> 31 = 0
  • 3 >> 32 = 3
  • 3 >> 33 = 1
  • 3 >> 34 = 0
  • 3 >> 35 = 0

java bit-shift bitwise-operators node.js

0
推荐指数
1
解决办法
94
查看次数