意义及本声明〜
回答
~
运算符是按位否定。它将打印m
的值的按位否定。 %x
表示printf
将以十六进制格式输出其值。
所以,值0xffdf
是值0x20
(32)的否定。
值32(INT位会):
0000 0000 0010 0000
其按位取反将是:
1111 1111 1101 1111
这是有道理的,因为:
1111 1111 = 0xff
和:
1101 1111 = 0xdf
非常感谢你的回答。 – 2012-01-17 19:43:53
而%x表示您在十六进制中打印x的值。
%x
是printf
format,表示int
值应该以十六进制显示。
~
是bitwise NOT,它翻转整数中的所有位。
声明:
printf("%x", m);
将显示输出20
作为0x20
=十进制32
。
声明:
printf("%x", ~m);
将显示输出ffdf
作为0xffdf
是0x20
按位反向。
它可能更有意义可视化二进制按位否定:
Base 10: 32 65503
Base 16: 0x20 0xFFDF
Base 2: 0000000000100000 1111111111011111
〜32 = -33使用unsigned int类型,得到的结果
要获得*什么*结果? – 2012-01-17 20:01:12
很好的细节 – Omar 2012-01-17 20:09:12
4294967263肯定 – 2012-01-17 20:09:57
这意味着x
应该有可能已经被宣布unsigned
而不是int
。
"%x"
printf格式需要参数unsigned int
,并以十六进制(基数16)打印其值。如果的值在可表示为int
或unsigned int
(即,0 .. INT_MAX
)的范围内,您可以安全地使用它int
参数。使用"%x"
,其值为负的int
,正如此代码片段所做的那样,严格来说,它具有未定义的行为,尽管实际行为可能具有合理的一致性。
C标准说:
的〜操作的结果被其 (促进)操作数的按位补(即结果中的每个位设置,当且仅 如果转换的操作数中的相应位未设置)。
注意,它的操作数的表示定义的,而不是它的价值。
你所描述的输出表明你正在使用一个带有二进制补码有符号整数的系统,其中int
只有16位,这在今天很不寻常。 (?您使用的是古老的Turbo C编译器或类似的东西)在我的系统,这个程序:
#include <stdio.h>
int main(void) {
int m = 32;
printf("%x\n" , ~m);
return 0;
}
产生这样的输出:
ffffffdf
(请注意,我已经添加了所需的#include <stdio.h>
和对m
声明分号。)
的~
符号代表位NOT,或补运算符; 是对每个位执行逻辑否定的一元操作,形成给定二进制值的“补码”。 0的二进制数字变为1,1的变为0.
32是二进制的00100000,〜32是11011111的二进制(或十进制的223)。
printf
函数中的%x
选项将显示无符号的十六进制格式(使用小写字母)。
所以,
printf("%x", m); // displays the hexadecimal value of 32 (00100000), "20"
printf("%x", ~m); // displays the hexadecimal value of ~32 (11101111), "ffdf"
[来源]
http://en.wikipedia.org/wiki/Bitwise_operation#NOT
http://en.wikipedia.org/wiki/Hexadecimal
http://en.wikipedia.org/wiki/Printf_format_string
- 1. 本声明的含义?
- 2. 什么“&”用C意味着++,当涉及一个方法声明
- 3. 意外的声明结束
- 4. predicted_value1 = regr1.predict(9)本声明的含义
- 5. 声明VS定义
- 6. Understading ostream以及如何在类定义中声明
- 7. 将公共类中声明的类成员定义的getters/setters声明为private是否有意义?
- 8. 声明类实例及其初始化
- 9. 类变量声明及其在角4
- 10. Bash脚本声明
- 11. 什么是关键词的几许的意义JavaScript的声明
- 12. 将对象声明为“final”有什么意义?
- 13. perl6中的方法声明中还有什么意义?
- 14. 这个声明对重写hashcode和equals有什么意义?
- 15. 的Sql自定义声明
- 16. Ada类型声明语义
- 17. 函数声明的含义
- 18. 函数声明和定义
- 19. 与声明和定义
- 20. 变量声明和定义
- 21. 多重声明和定义
- 22. 自定义C++声明宏
- 23. 声明自定义控件
- 24. 这个C#声明是什么意思?
- 25. 这个CSS声明是什么意思?
- 26. 声明ImageView obj =(ImageView)findViewById(R.id.demo);意思?
- 27. 是否定时声明好主意?
- 28. 以下声明是什么意思?
- 29. 为什么MiniZinc声明“意外”?
- 30. 在android中声明意图过滤器
你可能想通过你的一些老问题,接受最好的答案,否则人家可能不想提供有用的答案。 – brc 2012-01-17 19:34:56