Tag: 无符号

无符号幅度和二进制补码

我已经编写了一个代码来计算给定二进制代码的无符号幅度和二进制补码,除了我没有得到我应该的值。 我不确定我的代码究竟出了什么问题。 我希望不要在我的代码中使用幂函数和乘法函数。 我在下面发布了我的代码,请让我知道为什么我得到的值不正确。 #include “stdio.h” #define MAX_BITS 32 #define ENTER ‘\n’ #define NUMBER_TWO 2 int main() { int unsignedMag; int twosComp; int negation[MAX_BITS]; int bitStore[MAX_BITS]; char enter; int count; //Input from the User printf(“Enter up to 32 bits (hit ‘enter’ to terminate early): “); //Reads the first bit as a character char bit = […]

如何读取unsigned int的特定位

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

为什么不从返回int32_t的函数返回0x80000000导致警告?

考虑: int32_t f() { return 0x80000000; } 为什么不会导致编译器警告(至少在GCC上)? 0x80000000超出int32_t的范围( INT32_MAX为0x7fffffff )。 我相信这应该导致一个隐含的演员 – 这是正确的吗? 进一步的评论: if (f() == 0x80000000) foo(); 以上原因导致GCC没有任何警告。 然而 int32 ret = f(); if (ret == 0x80000000) baz(); 导致“警告:有符号和无符号整数表达式之间的比较”。 我相信这是因为0x80000000的类型为unsigned int因为它超出了int的范围。 那是对的吗? 假设我的假设都不对,为什么第一次比较不会引起警告?

C:unsigned int上的模数运算符给出了意外的输出

#include main() { unsigned a = -20; unsigned b = 10; printf(“%d\n”, (a % b)); printf(“%d\n”, (-20 % 10)); } Output: 6 0 第二个printf打印预期值0,而第一个printf打印6.为什么这个意外输出带有无符号整数?

如何在unsigned char中更改4位?

unsigned char *adata = (unsigned char*)malloc(500*sizeof(unsigned char)); unsigned char *single_char = adata+100; 如何更改single_char中的前四位以表示介于1..10(int)之间的值? 问题来自TCP头结构: Data Offset: 4 bits The number of 32 bit words in the TCP Header. This indicates where the data begins. The TCP header (even one including options) is an integral number of 32 bits long. 通常它的值为4..5,char值类似于0xA0。

这段代码做了什么以及使用的每个符号是什么意思? 使用的语言是C,我只是编码的初学者

遇到了一些我无法理解这两行正在做什么的代码。 甚至无法获得语法。 请指定使用了哪种类型的function,例如我猜测第一行中已经使用了条件运算符。 unsigned long long base_size = b >= 2 ? (b-2)/2:0; printf(“%llu\n”,(base_size*(base_size+1))/2);

C当值溢出时,将浮点类型转换为无符号整数类型时会发生什么

我想知道在C中从浮点类型转换为无符号整数类型时会发生什么,当值无法用相关的整数类型准确表示时。 举个例子 func (void) { float a = 1E10; unsigned b = a; } b我在我的系统上的值(在我的系统上unsigned能够表示从0到2 ^ 32-1的值)是1410065408 。 这对我来说似乎是明智的,因为它只是演员阵容结果的最低位。 我相信这些操作的行为在标准中是不确定的。 我错了吗? 如果我做这样的事情,我在实践中可以期待什么? 此外,签名类型会发生什么? 如果b是int类型,我得到-2147483648 ,这对我来说没有意义。

一元运算符“ – ”对C / C ++(以及不同的编译器)中的无符号数据类型做了什么?

例如: unsigned int numA = 66; // or anything really unsigned int numB = -numA; unsigned int numC = numA & numB 我知道可以使用按位补码运算符来获得二进制补码(与+1一起使用)。 我问的原因是因为我在国际象棋引擎的一些代码中偶然发现了这个问题。 国际象棋引擎做了许多“hacky”事情以获得绝对速度,特别是在每秒数百万次的移动生成function中。 (它是魔术位板移动生成的一个例子 – 它们中最优化的所有)并没有帮助。 这个国际象棋引擎代码特别只能在gcc编译下正常工作(我怀疑)。 不同的编译器如何对待这个? 特别是,与VS Studio 2012 Express中的C ++编译器相比,gcc如何处理这个问题。 谢谢。

程序员视角教科书中的无符号/有符号算术问题

int x = random(); int y = random(); unsigned ux = (unsigned) x; unsigned uy = (unsigned) y; 对于以下每个C表达式,您要指出表达式是否总是产生1.如果它总是得到1,则描述基础数学原理。 否则,举一个让它产生0的参数的例子。 A. (x-y) B. ((x+y)<> 2) << 2) <= x 对于这些问题,我认为只有A可以产生0,而其余的总是产生1。 我知道这可能是错的,我不是在寻找直接的答案,但我希望得到一些关于如何处理这些问题的一般知识/建议。 我有一个非常糟糕的教授,我一直在努力寻找在线资源,但我真的不知道从哪里开始或寻找什么。 我知道无符号/二进制补码算术和位移的基础知识,但我不知道如何应用它来查找这些问题的计数器情况。

如何在C中使用逐位和逻辑运算符将无符号数转换四倍

目标: 4x ( 4.400000095 ) = 17.60000038 合法操作:任何整数/未签名操作,包括。 ||,&&。 如果,同时 Max ops:30 返回表达式x + x + x + x的位级等价物 浮点参数f。 我的代码: unsigned 4x(unsigned uf) { unsigned expn = (uf >> 23) & 0xFF; unsigned sign = uf & 0x80000000; unsigned frac = uf & 0x007FFFFF; if (expn == 255 || (expn == 0 && frac […]