java int 按位取值_按位或取值为负值

你这个标签有 C/C++/Java,估计是系统自动判断的吧。楼上的解释有些不完全对。在 C/C++ 等语言中,区分有符号和无符号类型,但 Java 中无区分。在 Java 中,表示这样的一个无符号整数,必须用 long,是 64 位的。int 是装不下的,赋值都无法通过编译。但 C/C++ 的话,现在主流 x86 平台的 int 和 long 都是 32 位宽,不会出现无法编译的情况,但可能会警告,而且不管是这个长整数还是 -1,在内存中存储方式都一样。如果是用 C 语言中的 printf 输出,具体的结果和是否有符号无关,取决于格式化字符串如何书写。如果用 C++ 的 count 输出,一般重载了运算符,所以如果变量类型是无符号就输出无符号,变量类型有符号就输出有符号的。C/C++ 的编译器各家的实现和警告信息都略有不同,我这里在 Linux 上的 gcc 编译这段代码,警告如下,但不影响结果。

#include

#include

int main(int argc, char *argv[])

{

printf("%d\n", 4294967295 | 1);

return 0;

}

cc test.c -o test

test.c: In function ‘main’:

test.c:6:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]

printf("%d\n", 4294967295 | 1);

^

执行的结果就是输出 -1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值