Tag:

我该如何打印一位?

请告诉我如何打印一下,比如printf(“%d”,bit); 。

以下程序中的位掩码用法来自Programming Pearls

我今天开始阅读“Programming Pearls”,在进行练习时,我遇到了这个问题“你将如何实现自己的位向量?”。 当我查看解决方案时,它是这样的: #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 10000000 int a[1 + N/BITSPERWORD]; void set(int i) { a[i >> SHIFT] |= (1 << (i & MASK)); 我对这个陈述感到困惑的地方 1 << (i & MASK) 有人可以解释一下这里发生了什么吗?

Endian表示64位值

假设我unsigned long long x = 0x0123456789ABCDEF 。 以下哪项是正确的? (我只能validation第一个): 在32位小端处理器上,它将在内存中显示为67 45 23 01 EF CD AB 89 。 在64位小端处理器上,它将作为EF CD AB 89 67 45 23 01出现在内存中。 在32位大端处理器上,它将在内存中显示为01 23 45 67 89 AB CD EF 。 在64位大端处理器上,它将在内存中显示为01 23 45 67 89 AB CD EF 。

位字节式如何影响C中的按位移位和文件IO?

让L和B成为两台机器。 L从LSB(最低有效位)到MSB(最高有效位)对其位进行排序,而B从MSB到LSB进行排序。 或者,换句话说, L使用Little Endian而B使用Big Endian 位 – 不要与字节排序混淆。 问题1已解决 : 我们正在编写以下希望可移植的代码: #include int main() { unsigned char a = 1; a <<= 1; printf("a = %d\n", (int) a); return 0; } 在L上 ,它会打印2,但B上会发生什么? 它会将1移出并打印0吗? 解决方案: 6.5.7中的C99定义表明,至少在无符号整数类型上, <<和>>将分别乘以并除以2。 问题2: 我们正在编写以下希望可移植的代码: 阅读程序: /* program READ */ #include int main() { FILE* fp; unsigned char a; fp […]

为什么C编译器指定长为32位,长为64位?

在128位数字成为现实之前,长64位并保留很长时间是不是更有意义?

在C位中,乘以3除以16

我的一个伙伴有这些谜题,这是一个让我望而却步的谜题。 这是问题,你得到一个数字,你想要返回该数字乘以3并除以16舍入为0.应该很容易。 赶上? 你只能使用! 〜&^ | + <>运算符和它们只有12的组合。 int mult(int x){ //some code here… return y; } 我的尝试是: int hold = x + x + x; int hold1 = 8; hold1 = hold1 & hold; hold1 = hold1 >> 3; hold = hold >> 4; hold = hold + hold1; return hold; 但这似乎并没有起作用。 我想我有丢失的问题,但我似乎无法想出一种拯救它们的方法。 另一种观点是好的。 […]

获取64位整数内的位位数组

好吧,听起来有点复杂,但这正是我想要做的: 以10101010101为例 并返回{ 0, 2, 4, 6, 8, 10 } – 一个数组,其中包含所有位的位置 这是我的代码: UINT DQBitboard::firstBit(U64 bitboard) { static const int index64[64] = { 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3, 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4, […]

数字中设置的位数

以下是一个神奇的公式,它给出了一个数字中设置的位数。 /*Code to Calculate count of set bits in a number*/ int c; int v = 7; v = v – ((v >> 1) & 0x55555555); // reuse input as temporary v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) […]

如何从C中的数字中提取特定位?

我需要在C中提取short数据类型的特定部分(没有位)。 例如,我的二进制52504为11001101000 11000,我想要前6(FROM LSB – > MSB即011000十进制24)位和其余10位(11001101000十进制820)。 类似地,我希望这个函数过于通用,不能提取给定“start”和“end”的特定位数(即位块等效于一些十进制值)。 我检查了其他post,但那些没有帮助,因为给定的function并没有太多的概括。 我需要一些可以用于C的short数据类型的东西。 编辑 我有2048字节的短数组。 每个像素为10位。 所以我的16位组成每个字节占用一些时间2像素数据,有时3像素数据。 喜欢 (PIXEL:0,1)10 BITS + 6 BITS 然后(PIXEL:1,2,3)4 BITS(剩余第1个像素位)+ 10个BITS + 2个BITS。 等等..这个模式继续……所以,我想要提取每个像素并制作一个整个数组,让每个像素都被占用在整个字节(16位)上,如… 1字节应该包含1 DATA PIXEL,另一个BYTE应该包含整个16位的其他PIXEL值,依此类推。

~0做什么?

〜0意味着它翻转000000000到1111111111? printf(“Check: %i”, ~0); printf结果为-1,这就是我感到困惑的原因。 -1基本上和11111111111111111位的意思相同吗?