由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - a question about bitwise operation
相关主题
a simple question for C++ classC++疑问
一个指向指针的指针的引用?two c++ interview questions! (转载)
请教for_each请教一个作用域的问题
0 < -1 ? A c++ questioncompare double to float
小问题[合集] C++问题(copy constructor)
请问一个exception题目问一个简单的C++问题
两个继承问题问个char*的问题
为什么我看不懂下面的code,是不是水平还不够?数组弱问
相关话题的讨论汇总
话题: sizeof话题: endl话题: cout话题: ull话题: ul
进入Programming版参与讨论
1 (共1页)
s****n
发帖数: 700
1
unsigned int i;
i = 1 << (sizeof(i) * 8 - 1);
i will be overflowed, there is no problem if I use sizeof(i) - 2.
In the case i is 32bit, sizeof(i)*8 - 1 =31. How come it will overflow?
t****t
发帖数: 6806
2
if i is 32 bit, sizeof(i) is 4.

【在 s****n 的大作中提到】
: unsigned int i;
: i = 1 << (sizeof(i) * 8 - 1);
: i will be overflowed, there is no problem if I use sizeof(i) - 2.
: In the case i is 32bit, sizeof(i)*8 - 1 =31. How come it will overflow?

s****n
发帖数: 700
3
sorry, it should be sizeof(int) * 8
why doesn't i<< 31 overflowed for an integer i.

【在 t****t 的大作中提到】
: if i is 32 bit, sizeof(i) is 4.
a***y
发帖数: 2803
4
visual studio 2008上一切正常啊.
#include
using namespace std;
int main() {
unsigned int i;
i = 1 << (sizeof(i) * 8 - 1);
cout << "i is " << i < }

【在 s****n 的大作中提到】
: unsigned int i;
: i = 1 << (sizeof(i) * 8 - 1);
: i will be overflowed, there is no problem if I use sizeof(i) - 2.
: In the case i is 32bit, sizeof(i)*8 - 1 =31. How come it will overflow?

c****p
发帖数: 6474
5
结果应该是2^31喽。。。

【在 s****n 的大作中提到】
: unsigned int i;
: i = 1 << (sizeof(i) * 8 - 1);
: i will be overflowed, there is no problem if I use sizeof(i) - 2.
: In the case i is 32bit, sizeof(i)*8 - 1 =31. How come it will overflow?

s****n
发帖数: 700
6
那看看这个code
#include
using namespace std;
int main() {
int i;
unsigned int ui;
long l;
unsigned long ul;
long long ll;
unsigned long long ull;
i = 1 << (sizeof(i) * 8 - 1);
cout << "sizeof(i) is " << sizeof(i) << endl;
cout << "i is " << i < ui = 1 << (sizeof(ui) * 8 - 1);
cout << "sizeof(ui) is " << sizeof(ui) << endl;
cout << "ui is " << ui < l = 1 << (sizeof(l) * 8 - 1);
cout << "sizeof(l) is " << sizeof(l) << endl;
cout << "l is " << l < ul = 1 << (sizeof(ul) * 8 - 1);
cout << "sizeof(ul) is " << sizeof(ul) << endl;
cout << "ul is " << ul < ll = 1 << (sizeof(ll) * 8 - 1);
cout << "sizeof(ll) is " << sizeof(ll) << endl;
cout << "ll is " << ll < ull = 1 << (sizeof(ull) * 8 - 1);
cout << "sizeof(ull) is " << sizeof(ull) << endl;
cout << "ull is " << ull < }
Result is:
sizeof(i) is 4
i is -2147483648
sizeof(ui) is 4
ui is 2147483648
sizeof(l) is 8
l is 0
sizeof(ul) is 8
ul is 0
sizeof(ll) is 8
ll is 0
sizeof(ull) is 8
ull is 0
为什么long, long long type结果都是0呢。 编译的时候也是显示"arning: left
shift count >= width of type"

【在 a***y 的大作中提到】
: visual studio 2008上一切正常啊.
: #include
: using namespace std;
: int main() {
: unsigned int i;
: i = 1 << (sizeof(i) * 8 - 1);
: cout << "i is " << i <: }

c****p
发帖数: 6474
7
你把
1 << ...
改成
1L << ...
就没问题了。
1默认是int型,左移63位当然会出问题。。
warning不是针对结果(long型)的赋值,而是针对int型(常数1)的左移位数超过其位长


【在 s****n 的大作中提到】
: 那看看这个code
: #include
: using namespace std;
: int main() {
: int i;
: unsigned int ui;
: long l;
: unsigned long ul;
: long long ll;
: unsigned long long ull;

s****n
发帖数: 700
8
太谢谢了, 我真是太笨了, 看老半天都没意识到这样的问题。

【在 c****p 的大作中提到】
: 你把
: 1 << ...
: 改成
: 1L << ...
: 就没问题了。
: 1默认是int型,左移63位当然会出问题。。
: warning不是针对结果(long型)的赋值,而是针对int型(常数1)的左移位数超过其位长
: 。

c****p
发帖数: 6474
9
没关系,我以前也遇到过这样的问题。
知道了就好了

【在 s****n 的大作中提到】
: 太谢谢了, 我真是太笨了, 看老半天都没意识到这样的问题。
a***y
发帖数: 2803
10
sizeof(long) is 8 ? 你用的计算机cpu是32位还是64位?

【在 s****n 的大作中提到】
: 那看看这个code
: #include
: using namespace std;
: int main() {
: int i;
: unsigned int ui;
: long l;
: unsigned long ul;
: long long ll;
: unsigned long long ull;

c****p
发帖数: 6474
11
32位64位都是8吧。。。

【在 a***y 的大作中提到】
: sizeof(long) is 8 ? 你用的计算机cpu是32位还是64位?
P********e
发帖数: 2610
12
windows, 32bit machine是4

【在 c****p 的大作中提到】
: 32位64位都是8吧。。。
D*******a
发帖数: 3688
13
be careful about "long". It is 32-bit in 32-bit env and 64-bit in 64-bit env.

【在 s****n 的大作中提到】
: 那看看这个code
: #include
: using namespace std;
: int main() {
: int i;
: unsigned int ui;
: long l;
: unsigned long ul;
: long long ll;
: unsigned long long ull;

1 (共1页)
进入Programming版参与讨论
相关主题
数组弱问小问题
[合集] 关于构造函数请问一个exception题目
C++菜问: 怎么这样也可以?两个继承问题
C++ 初学者请教一个 iostream 的问题为什么我看不懂下面的code,是不是水平还不够?
a simple question for C++ classC++疑问
一个指向指针的指针的引用?two c++ interview questions! (转载)
请教for_each请教一个作用域的问题
0 < -1 ? A c++ questioncompare double to float
相关话题的讨论汇总
话题: sizeof话题: endl话题: cout话题: ull话题: ul