Tag:

检查一个字节中的ON位数?

我知道我们可以通过使用逻辑OR设置字节中的任何位,并且可以通过逻辑AND清除任何位 val |= (1<<order_number_of_bit_to_set); //for setting some specific number of bit 并清理一下 val &= ~(1<<order_number_of_bit_to_clear); // specific bit to clear 但我的问题是我们如何检查在字节中设置了多少和哪些有序数字位。 例如,如果我们有 val = 0x22; 这意味着在字节中设置第2和第5位 什么是高效,快速和最短的方式来做到这一点? 想到的快速解决方案是迭代所有位并检查它们的顺序以及是否设置记录并显示位的顺序。 但有没有其他有效的方法来做到这一点?

在指数和小数部分之间转换具有不同位数的格式

我试图刷新浮点数。 我正在阅读一个练习,要求从格式A转换为:k = 3,4比特分数和偏差= 3到格式B,其中k = 4,3比特分数和偏差7。 我们应该在必要时进行圆 格式之间的示例: 011 0000 (Value = 1) =====> 0111 000 (Value = 1) 010 1001 (Value = 25/32) =====> 0110 100 (Value = 3/4 Rounded down) 110 1111 (Value = 31/2) =====> 1011 000 (Value = 16 Rounded up) 问题:我无法弄清楚转换的工作原理。 首先,我设法在某些情况下正确地做到了,但我的方法是将格式A的位模式转换为十进制值,然后以格式B的位模式表示该值。 但有没有办法以某种方式从一位模式转到另一种模式而不进行此转换,只知道我们将e扩展1位并将分数减少1?

用64位int移位

我有一个__int64变量x = 0x8000000000000000 。 我尝试按字节顺序移动: x >> 4 我认为结果应该是0x0800000000000000 ,但不幸的是我得到0xf800000000000000 。 我用VS10。 为什么会这样? 我该如何解决?

我如何实现位数组?

当前方向: 使用sizeof在我的系统上以1字节开头,并使用unsigned char。 范围是0-255。 如果length是我需要的位数,那么elements就是我在数组中需要的元素数(字节数)。 constant unsigned int elements = length/8 + (length % y > 0 ? 1 : 0); unsigned char bit_arr[elements]; 现在我添加基本function,如set,unset和test。 其中j是每字节位数的索引,i是字节索引,h =位索引。 我们有i = h / 8和j = i%8。 Psuedo代码: bit_arr[i] |= (1 << j); // Set bit_arr[i] &= ~(1 << j); // Unset if( bit_arr[i] & (1 << j) […]

c中的位移乘法不使用2的幂

如何使用位移执行乘法36? 是不是只能乘以2的幂? 例如: unsigned x = 4; // binary 00000000 00000000 00000000 00001000 unsigned y = x << 3; // multiply by 8, resulting in binary 00000000 … 00100000 谢谢!

如何读取unsigned int的特定位

我有一个uint8_t,我需要读/写特定的位。 我该怎么做呢? 具体来说,我的意思是我需要写入,然后再读取前7位为一个值,最后一位为另一个值。 编辑:忘了指定,我将这些设置为大端

位移大二进制文件?

在C中对大量二进制数据进行位移的最佳或推荐方法是什么? 我有一个200K的二进制文件,我想离开,然后右移整个批次。

在C中输入IP地址

我想在C中编写一个程序,它从用户那里获取输入IP地址,然后我想对它进行一些位操作。 我怎么能用C中的位输入。我尝试了下面的代码,但整数大小为2字节,这使得这里的完整地址为8字节(64位)。 使用char扫描输入时,会丢失输入的值。 有没有办法以位为单位输入(我想要32位IPv4地址仅32位而128位V6仅128位)。 unsigned short int a,b,c,d; scanf(“%d.%d.%d.%d”, &a,&b,&c,&d); printf(“%d\t%d\t%d\t%d\t”, a, b, c, d); 提前致谢。

24位图像中有多少种颜色组合

我正在读一本书,我不确定这是错误还是我误解了这句话。 它读起来…… 如今,您可以购买的每台PC都有硬件,可以渲染至少1670万种颜色的图像。 这些图像不是包含数千个颜色条目的数组,而是包含每个像素的显式颜色值。 当然,24位显示器使用24位或每像素3个字节来显示颜色信息。 对于红色,绿色和蓝色,这给出了1个字节或256个不同的值。 这通常称为真彩色,因为256 ^ 3(1670万) 他说1个字节等于256个不同的值。 1字节= 8位。 8 ^ 2位= 64种颜色组合对吗? 这对我来说并不合适。 我知道这可能是一件容易理解的事情,但我不明白。

K&R中的位计数function

在K&R的“C编程语言”一书中,有一个位计数function: int bitsCount(unsigned x) { int b; for (b = 0; x != 0; x >>= 1) if (x & 01) b++; return b; } 我的问题是为什么他们使用x&01而不是x&1或x&00000001 ? 是不是01表示八进制1?