标签: bit

如何使用高字节和低字节?

我试图用2个字节代表32768.对于高字节,我是否使用与低字节相同的值,它将以不同的方式解释它们还是将实际值放入?那么我会把像32678 0或256 0这样的东西?或者两者都没有?任何帮助表示赞赏.

c++ byte bytearray bit 16-bit

15
推荐指数
2
解决办法
5万
查看次数

CHAR_BIT是> 8?

ISO C标准要求CHAR_BIT至少为8.

POSIX强制CHAR_BIT等于8,并且(几乎?)所有使用八位字节的网络和通信标准,是否有任何当代C实现CHAR_BIT> 8?

(注意:我对使用18或36位字的历史计算机体系结构不感兴趣.这是关于C的真正问题,因为它在当前的硬件上使用;考虑使用C99或更高版本的系统).

c byte char bit

15
推荐指数
3
解决办法
1117
查看次数

为什么存在字节?为什么我们不使用比特?

大多数系统上的字节由8位组成.

字节通常表示程序员可能使用的最小数据类型.根据语言,可能会调用数据类型charbyte.

有些类型的数据(布尔值,小整数等)可以存储在比字节更少的位中.然而,我所知道的(本机)编程语言不支持使用少于一个字节.

为什么存在使用8位存储数据的最小值?为什么我们甚至需要字节?为什么计算机不使用位的增量(1位或更多位)而不是字节的增量(8位的倍数)?

万一有人问:我不担心.我没有任何具体需求.我只是好奇.

hardware byte bit

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

什么是低位和高位?

谁能告诉我什么是低位和高位?如何识别更高和更低的位?以下是二进制表格.0110它的位数有多高?

0110 0111 1100 1010 1100 0111 1001 1011
Run Code Online (Sandbox Code Playgroud)

binary bit-manipulation bit

14
推荐指数
1
解决办法
2万
查看次数

arctan是如何实施的?

库的许多实现深入到FPATAN所有弧函数的实现.FPATAN是如何实施的?假设我们有1位符号,M位尾数和N位指数,得到这个数字反正切的算法是什么?应该有这样的算法,因为FPU做到了.

algorithm floating-point trigonometry processor bit

14
推荐指数
3
解决办法
1万
查看次数

"char*"具有不寻常的内存字大小(Knuth的MIX架构)

最初的MIX架构具有6位字节,存储器被寻址为31位字(5个字节和一个符号位).作为一个思考练习,我想知道C语言如何在这种环境中发挥作用,给出:

  • char至少有8位(C99规范附件E)
  • C99规范6.3.2.3节("指针")第8段说"当指向对象的指针转换为指向字符类型的指针时,结果指向对象的最低寻址字节.结果连续增加,向上到对象的大小,产生指向对象剩余字节的指针." 我对这个要求的解释是它支持"memcpy(&dst_obj,&src_obj,sizeof(src_obj))".

我能想到的方法:

  1. 使char为31位,因此通过"char*"间接是简单的内存访问.但这会使字符串浪费(并且意味着它不符合POSIX标准,因为它显然需要8位字符)
  2. 将3个8位字符打包成一个字,7个忽略位:"char*"可能由字地址和字符索引组成.然而,这似乎违反了6.3.2.3,即memcpy()必然会跳过忽略的位(这对于真实对象类型可能有意义)
  3. 将字符完全打包成单词,例如第四个8位字符在字0中有7位,在字1中有一位.但是这似乎要求所有对象都是8位字符大小,例如"uint31_t"不能声明匹配单词长度,因为这又有memcpy()问题.

所以这似乎留下了使用31位字符的第一个(浪费)选项,所有对象的大小都是char的倍数 - 我是否正确地阅读它?

c knuth bit memory-address language-lawyer

14
推荐指数
1
解决办法
605
查看次数

c#中布尔值的二进制表示是什么

我知道布尔值是1个字节(8位长)但我想知道它的二进制表示是什么.例如decimal => binary 4 => 100(0000 0100)8 => 1000(0000 1000)bool value => ???

c# binary boolean representation bit

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

不使用内置bin函数将整数转换为二进制

该函数作为参数接收整数,并且应该返回表示以二进制表示的相同值的列表作为位列表,其中列表中的第一个元素是最重要(最左侧)位.

我的功能目前输出'1011'数字11,我需要[1,0,1,1].

例如,

>>> convert_to_binary(11)
[1,0,1,1]
Run Code Online (Sandbox Code Playgroud)

python binary list converter bit

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

在C中通过一次操作交换两位?

假设我有一个包含六个未知值的字节:

???1?0??
Run Code Online (Sandbox Code Playgroud)

我想交换第2和第4位(改变任何?值):

???0?1??
Run Code Online (Sandbox Code Playgroud)

但是如何在C 中的一次操作中执行此操作

我在微控制器上每秒执行此操作数千次,因此性能是首要任务.

可以"切换"这些位.即使这与交换位不同,切换也可以用于我的目的.

c bit-manipulation arduino bit

12
推荐指数
3
解决办法
1万
查看次数

简化(A&B)&&!(A&C)

A,B和C是某些无符号整数类型的变量.从概念上讲,A是测试向量,B是"必需"位的位掩码(必须设置A中的至少一个对应位),并且C是"禁止"位的位掩码(可以不设置A中的相应位).因为我们正在混合按位和逻辑运算符,否则看起来很自然的解决方案

A & B & ~C
Run Code Online (Sandbox Code Playgroud)

是不正确的.相反,标题表达式等同于伪代码

((a0 & b0) | ... | (an & bn)) & (~(a0 & c0) & ... & ~(an & cn))
Run Code Online (Sandbox Code Playgroud)

其中a0,等等表示各个位(并且n是最高位的索引).我没有看到如何有效地重新排列这个并提取相应的代码但是,有没有一种聪明的方法,也许有^,简化标题中的表达式?

编辑:提示@ huseyintugrulbuyukisik的问题我注意到我们可以假设(B & C) == 0,但我不知道这是否有帮助.

编辑2:结果:这取决于分支预测的好坏!

#include <chrono>
#include <cmath>
#include <iostream>
#include <vector>

using UINT = unsigned int;
int main(void)
{
    const auto one = UINT(1);
    const UINT B = (one << 9); // Version 1
//  const UINT B = (one …
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation bitmask bit

12
推荐指数
1
解决办法
2211
查看次数