unsigned相关内容
嘿,我正在做一个练习,我必须用 C 编写一个无符号函数,我有一个问题,我是否必须因为函数的类型而返回一些东西??还是可选的?? 解决方案 在正常使用中,任何声明返回值的函数都应该返回一个值.这在很大程度上取决于良好的编程习惯.未能返回值通常是错误的征兆.但是,这不是 C 标准所要求的,有两个例外. C 2018 6.9.1 12 允许函数通过到达其代码的末尾而不返回值来终止,前提是调
..
这是我从不擅长的 C/C++ 领域. 我的问题是我有一个字符串,最终需要包含一些空字符.将所有内容都视为字符数组(或字符串)是行不通的,因为当他们找到第一个空值时,事情往往会失败.所以我想,好吧,我会切换到 uint8_t,所以一切都只是一个数字.我可以根据需要移动东西,并在我准备好后将其转换回字符. 我现在的主要问题是:如何将字符串的一部分复制到 uint8_t 缓冲区? 实际
..
这是我在尝试将两个数字相加时检测是否发生无符号整数溢出的实现. 我的系统上 unsigned int (UINT_MAX) 的最大值是 4294967295. int check_addition_overflow(unsigned int a, unsigned int b) {如果 (a > 0 && b > (UINT_MAX - a)) {printf("发生溢出\n");}返回0
..
我知道从无符号类型转换为相同等级的有符号类型会产生一个实现定义的值: C99 6.3.1.3: 否则,新类型是有符号的,值不能在其中表示;结果是实现定义的,或者引发了实现定义的信号. 这意味着我不知道如何对有符号数进行字节交换.例如,假设我从外围设备接收以小端顺序的两字节补码有符号值,并在大端 CPU 上处理它们.C 库中的字节交换原语(如 ntohs)被定义为处理无符号值.如果
..
signed int x = -5;无符号整数 y = x; y 的值是多少?这是怎么回事? 解决方案 取决于unsigned int的最大值.通常,unsigned int 是 32 位长,所以 UINT_MAX 是 232 −1. C 标准 (§6.3.1.3/2) 需要签名的 →无符号转换执行为 否则,如果新类型是无符号的,则通过重复加或减一个新类型可以表示的最大值来转换该值
..
如果lv存储的是long值,而机器是32位的,代码如下: iv = int(lv & 0xffffffff) 结果是 long 类型的 iv,而不是机器的 int. 在这种情况下,我如何获得(有符号的)int 值? 解决方案 import ctypes数字 = lv &0xFFFFFFFFsigned_number = ctypes.c_long(number).value
..
在这个答案中,您可以找到这条评论: 严格来说,转换前两个数字的位表示是否相同并不重要.即使使用 1 的补码或有符号幅度表示,(有符号)-1 到 unsigned long 的转换总是会导致 ULONG_MAX.(转换后的位模式将相同当然). 我知道您可以用其他方式表示 -1 而不是 Two's Compliment,这是一个有效的补充,应该在我的回答中.但是,在这样的实现中,依赖于 U
..
请解释这段代码是如何执行的.为什么我们在结构中使用“:".结构中冒号的用途是什么.sizeof运算符的输出应该是什么. #include int main(){结构位域{签名 int a : 3;无符号整数 b : 13;无符号整数 c : 1;};结构位域 bit1 = { 2, 14, 1 };printf("%ld", sizeof(bit1));返回0;} 解决方案 : 运算符用于
..
设置两个补码是为了让计算机更容易计算两个数的减法.但是计算机如何区分一个整数是有符号整数还是无符号整数呢?它的内存中只有 0 和 1. 例如,计算机内存中的1111 1111可以代表数字255,也可以代表-1. 解决方案 有符号和无符号使用相同的数据,但指令不同. 计算机将有符号和无符号整数存储为相同的数据.IE.255 和 -1 是相同的位.但是,您告诉编译器变量的类型.如果
..
如何查看变量的类型是无符号 32 位、有符号 16 位等? 如何查看? 解决方案 使用type() 内置函数: >>>我 = 123>>>类型(i)>>>type(i) 是 int真的>>>我 = 123.456>>>类型(i)>>>类型(i)是浮点数真的 要检查变量是否属于给定类型,请使用 isinstance: >>>我 = 123>>
..
我已经尝试过 scanf("%u",&number) 并且我输入了负数问题是当我 printf("%d",number) 我得到负数.我认为这会阻止我阅读负数.scanf("%d",&number) 和 scanf("%u",&number) 真的是一回事吗?还是只是为了便于阅读. 我是否在做一些称为未定义行为的事情? 编辑: 从 维基百科我读到: %u : 扫描十进制无符
..
我对无符号数字(unsigned short、int 和 longs)的了解,它仅包含正数,但以下简单程序成功地将负数分配给了无符号整数: 1/*2 * ======================================================================================3 *4 * 文件名:prog4.c5 *6 * ==========
..
我有以下代码: #include int main() {无符号整数 a = -1;int b = -1;printf("%x\n", a);printf("%x\n", b);printf("%d\n", a);printf("%d\n", b);printf("%u\n", a);printf("%u\n", b);返回0;} 输出为: ffffffff噗噗噗-1-14294967295
..
我发现 mul 和 imul 都可以用来将有符号数乘以无符号数. 例如: 全局 _start.data 节字节变量 DB -5节.text_开始:移动, 2imul BYTE [字节变量] 您可以将 imul 替换为 mul,结果仍然相同(-10). 有符号数乘以无符号数时,mul 和 imul 是否完全相同,或者是它们之间有区别吗? 解决方案 上半部分不同,如评论中所述.
..
#include 主要的() {无符号 a = -20;无符号 b = 10;printf("%d\n", (a % b));printf("%d\n", (-20 % 10));}输出:60 第二个 printf 打印预期值 0,而第一个 printf 打印 6.为什么这个带有无符号整数的意外输出? 解决方案 unsigned int 可以保存从 0 到 UINT_MAX 的值,没有负
..
我有一个移位和无符号长整型的问题.这是我的测试代码: char标头[4];标头[0] = 0x80;标头[1] = 0x00;标头[2] = 0x00;标头[3] = 0x00;无符号长l1 = 0x80000000UL;无符号长l2 =((无符号长)标头[0]
..
我有一个字节数组. bytes [] = [43,0,0,-13,114,-75,-2,2,20,0,0] 我想将其转换为Java中的无符号字节.这就是我所做的:创建一个新数组,并使用&复制值.0xFF: this.bytes =新的byte [bytes.length];为(int i = 0; i
..
我发现了conio.h的getch()的c实现.可悲的是它带有一个转换警告编译,我不知道该怎么做才能正确解决它.我找到了此链接,但是我没有不知道如何实现. #include#include#include#include"getch.h"/*从按键读取,不回显*/int getch(无效){struct termios oldat
..
有人可以向我解释这两个问题吗,因为我必须在作业中对两者进行解释. 我知道什么是正常的整数,并使用以下内容对其进行描述: “整数是整数,可以为正,负和零,但不能有小数点." 但是我不确定签名和未签名. 谢谢 解决方案 有符号整数和无符号整数之间的区别在于,需要整数的一个字节来保存符号. 例如,使用两个二进制数字,您可以具有以下内容: Base 2 Base
..
我在此处读到: 根据C99§6.3.1.4脚注50: 当整数类型的值是当值为real时,无需执行转换为unsigned类型的转换浮动类型转换为无符号类型.因此,范围可移植的实际浮点值为(−1,Utype_MAX + 1). 现在,我对以下两者之间的细微差别(这次是 C ++ 03 !)感兴趣: double d1 = 257;双倍d2 = -2;无符号字符c1 = d1;//
..