关键字符的十进制表示
decimal representation of key chracters
我对C++不太熟悉,所以当我在寻找破解的来源时,我有点困惑,因为它看起来像是短的-223或
foo = 0xde;// 222
unarfoo = ~(foo);// -223
当我运行这行代码时,正在被翻译成字符"!"。。。
cout << (char)(~(foo));// outputs "!"
这显然不是ascii翻译,因为ascii不使用负数作为字符,所以我猜这是C编译独有的东西,因为当我在java上尝试将任何负数short/int翻译成字符时,我得到的只是一个"?"。
有人能详细说明到底发生了什么以及为什么?非常感谢!
0xde=11011110b,~(0xde)=00100001b=0x21十六进制,在ASCII表中代表!
所以c++中的~算子是一个逐位否定
Java对字符使用UNICODE(64位值),因此当您尝试-233时,它最终会出现在UNICODE表顶部附近的某个位置,并且很可能无法在您的系统中表示。
您在C中看到的程序使用的是8位宽的char
数据类型。因此,a~(-233)与33(或!
字符)(按位)几乎相同
现在发生的是处理器如何处理二的补码运算AND负数。情况是它们是一样的:因为字符几乎每次都是8字节,所以你得到的是:
foo=222;unarfoo=~foo=-(255-foo)=-(255-222)=-233
所以本质上,这只是一个将字符解释为有符号或无符号的问题。
foo
为0xde或0x000000de;
CCD_ 6为0xffffff21;
(char)~foo
是0x21(感叹号)
相关文章:
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- (第 1 位 + 第 2 位)以十进制数表示
- 如何将QBytearrayBCD转换为十进制QString表示
- 使用十进制表示法来引用多维阵列
- 如何使用C 将二进制数字的字符串转换为其签名的十进制表示
- 与 IPv4 点分十进制表示法匹配的 lex 模式
- 计算整数的十进制表示形式的不同位数
- C++-如何获得十进制数的二进制表示
- 关键字符的十进制表示
- 从包含表示约 64 GB 值的十进制数的 String 变量中获取值
- C++ 一种方法,该方法将十进制值作为用布尔数组表示的二进制的整数返回
- 以十进制、八进制和十六进制表示法标识整数文本是否与转义字符中的整数文本相同
- Codekata将数字从十六进制转换为十进制整数表示形式
- 十进制数和精确表示
- C++:将 UTF16 字符的十六进制表示转换为十进制(如 python 的 int(hex_data, 16))
- 类型的十进制表示长度的近似值
- 如何使用Clang知道IntegerLiteral是来自十进制还是八进制表示
- Microsoft psapi方法是否使用十进制或二进制表示法返回字节?
- 将整数的十进制值作为其 ASCII 表示形式插入到字符向量中
- 在c++中处理浮点数或双精度数.表示错误.丢失十进制值