相关疑难解决方法(0)

C++:为什么bool是8位长?

在C++中,我想知道为什么bool类型是8位长(在我的系统上),只有一位足以保存布尔值?

我曾经认为这是出于性能原因,但是在32位或64位机器上,寄存器为32或64位宽,性能优势是什么?

或者这只是这些"历史"原因之一?

c++ size boolean

127
推荐指数
4
解决办法
6万
查看次数

二进制文字?

在代码中,我有时会看到人们以十六进制格式指定常量,如下所示:

const int has_nukes        = 0x0001;
const int has_bio_weapons  = 0x0002;
const int has_chem_weapons = 0x0004;
// ...
int arsenal = has_nukes | has_bio_weapons | has_chem_weapons; // all of them
if(arsenal &= has_bio_weapons){
  std::cout << "BIO!!"
}
Run Code Online (Sandbox Code Playgroud)

但是我在这里使用十六进制格式没有意义.有没有办法直接用二进制文件做?像这样的东西:

const int has_nukes        = 0b00000000000000000000000000000001;
const int has_bio_weapons  = 0b00000000000000000000000000000010;
const int has_chem_weapons = 0b00000000000000000000000000000100;
// ...
Run Code Online (Sandbox Code Playgroud)

我知道C/C++编译器不会编译它,但必须有一个解决方法吗?是否有可能在其他语言如Java?

c++

49
推荐指数
8
解决办法
7万
查看次数

为什么C不具有二进制文字?

我经常希望我能在c中做这样的事情:

val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5
Run Code Online (Sandbox Code Playgroud)

拥有这种语法似乎是C的一个非常有用的补充,没有我能想到的缺点,对于低级语言而言,这似乎是很自然的事情.

编辑:我看到了一些其他很好的选择,但是当有更复杂的面具时它们都会崩溃.例如,如果reg是一个控制微控制器上I/O引脚的寄存器,我想在我写入的reg = 0x46;同时将引脚2,3和7设置为高电平,但我不得不花10秒时间考虑它(而且我每次我在没有看一两天后阅读这些代码时,我可能不得不再花10秒钟,或者我可以写reg = (1 << 1) | (1 << 2) | (1 << 6);但我个人认为这不仅仅是写"reg = 0b01000110;".我同意它不会超出8位或16位架构.不是说我曾经需要制作32位掩码.

c syntax binary literals

30
推荐指数
4
解决办法
3万
查看次数

用C代码编写二进制数系统

因为我们使用0x十六进制数字的前缀,0对于八进制数字,是否可以为二进制数字做任何事情?

我尝试了b后缀,但GCC不允许这样做.

错误:整数常量上的后缀"b"无效

可能吗?

c

23
推荐指数
3
解决办法
16万
查看次数

GCC二进制文字和C++ 14之间的区别?

C++ 14似乎即将到来,编译器已经在尝试实现这个新版本的核心功能.我正在研究GCC对这些核心功能的支持,并注意到二进制文字部分:GCC实现了它们,但似乎在GNU二进制文字和C++ 14二进制文字之间有所区别.以下是两者的相应参考:

我试图找到他们两个之间的一些差异,因为GCC似乎有所作为,但找不到任何东西.你们中有谁知道更多可能的不兼容性吗?

c++ gcc g++ literals c++14

18
推荐指数
1
解决办法
3618
查看次数

C++二进制常量/文字

我使用一个众所周知的模板来允许二进制常量

template< unsigned long long N >
struct binary
{
  enum { value = (N % 10) + 2 * binary< N / 10 > :: value } ;
};

template<>
struct binary< 0 >
{
  enum { value = 0 } ;
};
Run Code Online (Sandbox Code Playgroud)

所以你可以做二进制<101011011> :: value.不幸的是,对于无符号长整数,它有20位数的限制.

有没有人有更好的解决方案?

c++ binary templates constants

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

C表示基数2中的int

可能重复:
我可以在C或C++中使用二进制文字吗?

我正在学习C,我最近发现我们可以用不同的方式表示整数,如:

(假设i"人类可读"的值为512.)以下是表示:

十进制:

int i = 512; 
Run Code Online (Sandbox Code Playgroud)

八:

int i = 01000;
Run Code Online (Sandbox Code Playgroud)

十六进制:

int i = 0x200;
Run Code Online (Sandbox Code Playgroud)

在基数2(或二进制表示)中,5121000000000.怎么用C写这个?

有点像int i = 1000000000b?这很有趣,但遗憾的是没有C编译器接受该值.

c binary integer representation

13
推荐指数
3
解决办法
6万
查看次数

为什么0x00000100 = 256?

不应该0x00000100 = 4.

我知道0x00000001 = 1,因为2 ^ 0和0x00000010 = 2,因为2 ^ 1.我的想法有什么问题?

initVariable(&variable1, "variable1", "1, 2, 3", 0x00000100);

assertIntegerEquals(variable1.address, 4); // 0x00000100 = 4?
Run Code Online (Sandbox Code Playgroud)

我的断言失败了,因为它说256!= 4

c binary

8
推荐指数
4
解决办法
9254
查看次数

C的值意外地定义了变化

我的代码中有很多内容#define.现在一个奇怪的问题已经悄然兴起.

我有这个:

#define _ImmSign    010100
Run Code Online (Sandbox Code Playgroud)

(我正在尝试模拟二进制数)

显然,我希望这个数字变成10100.但是当我使用这个数字时,它变成了4160.

这里发生了什么?我该如何阻止它?

额外

好的,这是因为语言将其解释为八进制.是否有一些聪明的方法来迫使语言将数字解释为整数?如果前导0定义了八进制,而0x定义了十六进制现在我想到它...

c c-preprocessor

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

如何用C中的二进制数初始化整数变量?

我们通过将0作为前缀并将十六进制设置为0x来初始化八进制.我们如何初始化二进制数的int变量?C中是否有二进制数的访问说明符?例如,对于八进制,%o,对于十六进制数,%x.

c

5
推荐指数
1
解决办法
9334
查看次数