不是十六进制值0xffff
Not of hexadecimal value 0xffff?
我猜输出应该是"0000",但它是ffff,而不是~ffff->0000 0000 0000 0000
#include<stdio.h>
int main()
{
unsigned int a=0xffff;
~a;
printf("%xn", a);
return 0;
}
您需要将值重新分配给a
:
a = ~a;
即使这样,由于数据类型的大小,输出值可能看起来像这样:
ffff0000
要使其按预期工作(全部为0),将a
的初始值设置为UINT_MAX
(从limits.h
)。这样做将所有位设置为1
。
输入~a;
无效。它是一个表达式,返回a
的补码,但不改变a
本身。
你想要a = ~a;
就像Tim和Vlad说的,你并没有对逐位反转做任何事情。
即使您将代码更改为a = ~a;
,您也可能不会得到零。这是因为如果unsigned int
超过16位,你将有前导零,反转后变成1。
所以我希望你的输出是
FFFF0000
或者
FFFFFFFFFFFF0000
如果需要16位的按位操作,可以使用
#include <inttypes.h>
uint16_t a;
因为您没有将值赋给a。您需要a = ~a;
~a
本身是返回a
的按位补码的语句。您可以将a分配给~a
(如@timcooper建议的),或者您可以
printf("%xn", ~a);
正如其他人已经说过的,您需要使用a = ~a;
将值赋回给a或直接使用printf("%xn",~a);
打印结果,但无论哪种情况,您仍然不会像您期望的那样得到零。
~操作符将翻转变量中的所有位。因为你最有可能处理的是32位整数,你最终会得到0xFFFF0000
,因为上面的16位将从0翻转为1。
#include<stdio.h>
int main()
{
unsigned short int a= 0xffff;
a=~a;
printf("%xn", a);
return 0;
}
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 绝对编码器十六进制输入
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- C++17 十六进制浮点文字单精度后缀冲突?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 打印十六进制字符
- 不是十六进制值0xffff