标签: data-representation

什么是"2的补充"?

我在计算机系统课程中,并且一直在与Two's Complement一起挣扎.我想了解它,但我读过的所有内容并没有为我提供图片.我已经阅读了维基百科文章和其他各种文章,包括我的教科书.

因此,我想开始这个社区wiki帖子来定义Two's Complement是什么,如何使用它以及它如何在诸如强制转换(从有符号到无符号,反之亦然)等操作中影响数字,逐位操作和位移操作.

我所希望的是一个清晰简洁的定义,程序员很容易理解.

binary computer-science bit-manipulation twos-complement data-representation

410
推荐指数
7
解决办法
40万
查看次数

C和C++标准对位级整数表示和操作有何看法?

我知道C和C++标准没有规定数字的特定表示(可以是二进制补码,符号和数量等).但我不清楚这些标准(并且无法确定是否已经说明)知道在使用位时是否存在任何特定的限制/保证/保留表示.尤其:

  1. 如果整数类型中的所有位都为零,那么整数整数是否代表零?
  2. 如果整数类型中的任何位是1,那么整数整数是否表示非零?(如果这是"是",那么一些表示如符号和幅度将受到额外限制)
  3. 是否有保证的方法来检查是否有任何位未设置?
  4. 是否有保证的方法来检查是否设置了任何位?(#3和#4类型取决于#1和#2,因为我知道如何设置,例如某个变量中的第5位(参见#5)x,我想检查变量y以查看它是否是第5位是1,我想知道是否if (x & y)可行(因为据我所知,这取决于表示的值而不是该位是否实际上是1或0))
  5. 是否有保证的方法来设置最左边和/或最右边的位?(至少比将char c所有位置为真(设置为c = c | ~c)并c = c << (CHAR_BIT - 1)设置高位和c = c ^ (c << 1)低位更简单的方法,假设我没有做任何假设,我不应该这样,给出这些问题)
  6. 如果#1的答案是"否",那么如何迭代整数类型的位并检查每个位是1还是0?

我想我的整体问题是:C和C++标准是否有关于位和整数的限制/保证/保留表示,尽管事实上没有强制表示整数的表示(如果C和C++标准在这方面有所不同) ,他们的区别是什么?)

我在完成作业时提出了这些问题,这需要我做一些操作(注意这些不是我作业的问题,这些都是"抽象的").

编辑:至于我称之为"位",我的意思是"值形成"位而不包括"填充"位.

c c++ integer data-representation language-lawyer

18
推荐指数
2
解决办法
3978
查看次数

代表C中的动态类型

我正在写一种动态类型的语言.目前,我的对象以这种方式表示:

struct Class { struct Class* class; struct Object* (*get)(struct Object*,struct Object*); };
struct Integer { struct Class* class; int value; };
struct Object { struct Class* class; };
struct String { struct Class* class; size_t length; char* characters; };
Run Code Online (Sandbox Code Playgroud)

目标是我应该能够将所有内容作为a传递struct Object*,然后通过比较class属性来发现对象的类型.例如,要转换一个整数以供使用,我只需执行以下操作(假设它integer是类型struct Class*):

struct Object* foo = bar();

// increment foo
if(foo->class == integer)
    ((struct Integer*)foo)->value++;
else
    handleTypeError();
Run Code Online (Sandbox Code Playgroud)

问题是,据我所知,C标准没有对如何存储结构做出承诺.在我的平台上这是有效的.但是在另一个平台struct String可能存储value之前class和我foo->class在上面访问时我会实际访问foo->value,这显然很糟糕.便携性是这里的一个重要目标.

这种方法有其他选择:

struct …
Run Code Online (Sandbox Code Playgroud)

c data-representation

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

为什么varint是一种有效的数据表示?

我目前正在研究协议缓冲区的文档.Varints描述为:

varint中的每个字节(最后一个字节除外)都设置了最高有效位(msb) - 这表示还有其他字节.每个字节的低7位用于存储7位组中的二进制补码表示,最低有效组优先.

我的问题是为什么人们会选择在每个字节上丢失一位的表示?这种方法有什么好处?

integer protocol-buffers data-representation

11
推荐指数
3
解决办法
3555
查看次数

如何用表格(html)表示二叉树?

这是勇敢的脑筋急转弯.我已经好几天了,只是无法提供解决方案.

我想提出这样的事情:

在此输入图像描述

仅使用html,CSS和PHP.

我靠近了,但不是我所期待的.这是PHP中的代码,这是输出.

<table border="0">
<thead>
    <tr>
        <th>Cientoveintiochavos</th>
        <th>Seseintaicuatravos</th>
        <th>Treintaidosavos</th>
        <th>Dieciseisavos</th>
        <th>Octavos</th>
        <th>Cuartos</th>
        <th>Semifinales</th>
        <th>Final</th>
    </tr>
</thead>
<tbody>
<?php for($i=0;$i<256;$i++): ?>
    <tr>
        <?php for($n=0,$c=2;$n<8;$n++,$c*=2): ?>
            <?php 
            /*
            if(false){//$i == 0) {
                $rwspn = $c/2+1; 
                $iter = 0;
            } else {
                $rwspn = $c; 
                $iter = $c;//-$c/2+1;
            } 
            */
            $class = ($i%($c*2))?'par':'impar winner';
            if($i%$c==0):?>
                <td rowspan="<?=$c;?>" class="<?=$class;?>"><span><?php echo genRandomString();?></span></td>
            <?php endif; ?>
        <?php endfor; ?>
    </tr>   
<?php endfor; ?>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何表示二叉树或树形图或提出更智能的代码,请告诉我!

php binary-tree html-table data-representation

9
推荐指数
1
解决办法
3660
查看次数

在Perl 6中,如何使用NativeCall接口将原始字节转换为浮点数?

这段对话中,Perl 6的IRC频道,并发布由马丁·巴特的问题时,我试图重现此C代码使用Perl6 NativeCall接口,用于与该目的.这是我尝试过的:

use NativeCall;

my uint32 $num = .new;
my num32 $float = .new: Num(1.0);

sub memcpy(num32 $float, uint32 $num, int32 $size) is native('Str') { * };

memcpy($float,$num,4);
say $num;
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

This type cannot unbox to a native integer: P6opaque, Any
Run Code Online (Sandbox Code Playgroud)

我将其解释为,您已将其声明为整数,我无法将其转换为原始内存,以便可以从此处复制到此处.

这只是回答Martin Barth更常见问题的一种可能方式:如何将原始字节转换为浮点数.也许有其他方法可以做到这一点,但无论如何我都很想知道如何将C程序转换为NativeCall等价物.

更新:与此同时,这是其他帖子试图成为解决方案的原始问题.

perl6 data-representation nativecall

9
推荐指数
1
解决办法
139
查看次数

const_cast是否会导致实际的代码发射?

这是真的,const_cast会仅仅是一个的方式来告诉编译器"停止呻吟,把它当作一个非const指针"?有没有将const_cast本身转换为实际机器代码的情况?

c++ const memory-model const-cast data-representation

8
推荐指数
2
解决办法
399
查看次数

R最大/最小可表示数字

我想在R中获得最大/最小的可表示数字.

输入".Machine"后

我有:

$double.xmin
[1] 2.225074e-308

$double.xmax
[1] 1.797693e+308
Run Code Online (Sandbox Code Playgroud)

但是,即使我在R命令提示符下键入2.225074e-309,我得到2.225074e-309而不是预期的0

如何找到最大/最小数字,其中加1或减1将导致Inf(添加1到最大数字)或0(从最小数字减去1)?

r data-representation

8
推荐指数
1
解决办法
4007
查看次数

OCaml如何在运行时表示惰性值?

这一在现实世界中OCaml中描述了不同数据类型的运行时内存布局。但是,没有关于惰性值的讨论。

  • 如何lazy_t实现,即它的运行时表示形式是什么以及编译器内置的主要操作是什么?链接到源代码将不胜感激。我查看了CamlinternalLazy模块,但是仅基于对Obj模块中函数的调用,似乎很难解读实际的表示形式。
  • 有人可以提供对表示/操作所做的更改的摘要,以使其对于OCaml多核项目而言是线程安全的吗?这个提交似乎是实现的提交,但是对于我来说,作为局外人来说似乎有点不透明。

注意:此问题 OCaml编译器/运行时有关。据我所知,有如何偷懒值应该由没有实施标准规范 ocaml的编译器/运行。

ocaml lazy-evaluation memory-layout data-representation

8
推荐指数
1
解决办法
178
查看次数

效率:char数组与int数组

我正在编写游戏并希望使用数组来表示一个板.我正在寻找效率,因为我要进行多次迭代.在这种情况下,int数组或char数组似乎都很方便用于电路板表示.在int数组和char数组中进行操作时,效率方面有什么不同吗?

我怀疑由于char数组的每个元素都有1个字节的大小,因为内存中的表示形式不同,所以它可能会更慢(考虑到一个现代计算机至少有32位用于int表示)...我是对的吗?

提前致谢.

编辑:我将生成游戏树,这就是效率如此重要以及时间消耗的微小差异可以产生巨大差异的原因.

c arrays string malloc data-representation

7
推荐指数
2
解决办法
3051
查看次数