Tag: 位运算符

改变一个整数

我们有一个整数 int x = 50; 在二进制中,它是 00110010 如何以编程方式更改第四(第4)位?

从整数中获取每个数字

假设我有一个名为’score’的整数,如下所示: int score = 1529587; 现在我想做的是使用按位运算符从得分中获取每个数字1,5,2,9,5,8,7 (参见下面的编辑说明)。 我很确定这可以做到,因为我曾经使用类似的方法从hex颜色值中提取红绿色和蓝色值。 我该怎么办? 编辑 它不一定是按位运算符,我只是认为它更简单。

~0做什么?

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

按位’&’运算符

我在按位’&’运算符中缺乏一些基本的理解。 5 = 101 4 = 100 那么为什么以下if条件的输出是真的并且位101 & 100应该是假的 : #include main() { if(5&4) printf(“Yes\n”); }

你能控制一个按位右移将填充C吗?

据我所知,当你在C中使用左移位运算符时,它保证空位将填充为0。 但是,我已经读到右移是依赖于实现的,这意味着在一些机器中空位将填充0,而在其他机器中它们将填充1。 我正在程序中使用右移,事实上我的机器用1填充空位。 问题是我需要用0填充0。 有没有办法迫使0在右移? 在应用右移之后,一种解决方案是创建像011111111这样的掩码,然后应用按位AND,这将更改插入到0的最左边的1。 但这很麻烦,浪费时间。 如果有办法告诉我的机器用1s填充正确的class次,那将更容易。 谢谢

十进制到二进制

我有一个数字,我想在C中转换为二进制(从十进制)。 我希望我的二进制文件总是以5位(小数字永远不会超过31)。 我已经有一个通过分割手动完成的function,但很难将其填充到5位。 有没有更简单的方法? 也许使用按位移位? 我也希望二进制文件在char *表示

在C中将float转换为int(按位)

给定代表IEEE 754浮点数的32位,如何使用表示上的整数或位操作(而不是使用机器指令或编译器操作进行转换)将数字转换为整数? 编辑#1: 我必须遵循function但在某些情况下失败: 输入:int x(包含IEEE 754格式的32位单精度数) if(x == 0) return x; unsigned int signBit = 0; unsigned int absX = (unsigned int)x; if (x < 0) { signBit = 0x80000000u; absX = (unsigned int)-x; } unsigned int exponent = 158; while ((absX & 0x80000000) == 0) { exponent–; absX <> 8; unsigned int result […]