相关疑难解决方法(0)

为什么对签名数字更喜欢两个补码而不是符号和数量?

我只是好奇是否有一个理由为了在二进制中表示-1,使用二进制补码:翻转位并加1?

-1表示为11111111(二进制补码)而不是(对我来说更直观)10000001,它是二进制1,第一位作为负标志.

免责声明:我不依赖二进制算术来完成我的工作!

math binary negative-number internal-representation twos-complement

196
推荐指数
8
解决办法
8万
查看次数

什么是整型文字类型?以及它们是如何存储的?

我刚刚开始学习 C,一个问题困扰了我一段时间。如果我写

int i = -1;
unsigned int j = 2;
unsigned int k = -2;
Run Code Online (Sandbox Code Playgroud)

整数文字-1and 2and的类型是什么-2,它如何转换为存储在signed intand 中unsigned int

有符号整数是什么意思,是变量还是整数文字的属性?比如-2有符号整数和2无符号整数?

c signed constants unsigned-integer

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

取消引用这个指针给了我-46,但我不知道为什么

这是我运行的程序:

#include <stdio.h>

int main(void)
{
    int y = 1234;
    char *p = &y;
    int *j = &y;
    printf("%d %d\n", *p, *j);
}
Run Code Online (Sandbox Code Playgroud)

我对输出有点困惑.我所看到的是:

-46 1234
Run Code Online (Sandbox Code Playgroud)

我把这个程序写成了一个实验,不知道它会输出什么.我期待可能有一个字节y.

这里发生了什么"幕后"?解除引用如何p给我-46

正如其他人指出的那样,我必须进行明确的施法才能导致UB.我没有改变这一行char *p = &y;,char *p = (char *)&y;所以我没有使下面的答案无效.

此程序不会导致此处指出的任何UB行为.

c pointers casting dereference

-3
推荐指数
2
解决办法
1243
查看次数