社区
C++ 语言
帖子详情
一个位运算的问题
q344144460
2014-04-22 08:51:16
float fval = 4.25;
int val = ((*((int*)&fval)) & (0xffffffff));
cout << val << endl;
为什么结果不是-1
...全文
100
7
打赏
收藏
一个位运算的问题
float fval = 4.25; int val = ((*((int*)&fval)) & (0xffffffff)); cout << val << endl; 为什么结果不是-1
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赵4老师
2014-04-23
打赏
举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
赵4老师
2014-04-23
打赏
举报
回复
http://bbs.csdn.net/topics/390676437
xiaohuh421
2014-04-23
打赏
举报
回复
因为你使用的是 & &表示按位与, 这样的话你&0xffffffff 相当于原来的数据完全没有改变. 你想变成-1, 那需要使用 | , 使用它才是按位或, 即按位置位.
shlvshe00
2014-04-23
打赏
举报
回复
float fval = 4.25;在栈里面表现为00 00 88 40,你转换为int后就是0x40880000,等于10进制的1082654720
q344144460
2014-04-23
打赏
举报
回复
╮(╯▽╰)╭啊啊啊
q344144460
2014-04-22
打赏
举报
回复
引用 1 楼 jerry_dqh 的回复:
为啥是-1,肯定不是负1,最高位不会是1的
恩恩,我刚接触这个。。就是不知道为什么最高位没变成1.。 因为int val = 0xffffffff;这样的val就是-1
碼上道
2014-04-22
打赏
举报
回复
为啥是-1,肯定不是负1,最高位不会是1的
位运算
——强大得令人害怕
先言众所周知,
位运算
是我们学计算机必学的东西,前人用二进制、
位运算
给我们了
一个
操作简单的计算机,但我们却很少接触
位运算
了。今天介绍一些
位运算
在算法中的运用。
位运算
基础 &amp; 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有
一个
为1,该位的结果值为1 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反 ~是一元运算符,
位运算
(按位与、按位或、异或)
按位与运算符(&) 参加运算的两个数,按二进制位进行“与”运算。 运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算) 即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。 例:3 &5 即 00000011 & 00000101 = 00000001 ,所以 3 ...
八皇后
问题
优雅解法——
位运算
古老的八皇后
问题
估计大家都不陌生。
一个
8✖️ 8的棋盘,放置八个皇后(Queen),每个皇后会攻击和自己在同一行(列),同一左(右)对角线上的其他皇后。如何放置这8个皇后,才能使得没有任何皇后会互相攻击? 这个
问题
最传统的解法就是回溯法(back-tracking),然而这里我要讲的是一种更为优雅的解法,那就是使用
位运算
。
位运算
位运算
就是在0,1bit级别进行的操作,这样的操作比数字的加减乘除不知
位运算
——异或运算
目录按位异或运算(^)异或运算的应用镜子田地镜子 按位异或运算(^) 按位异或运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0 即相应位的值相同的,结果为 0,不相同的结果为 1。 例如,2 ^ 6结果为4 因为2表示为二进制为0010,6表示为二进制为0110 两数只有第三位相异,因此最后的结果为0100,即为4 了解异或运算的用法,我们来看看异或运算在算法题中的应用。 异或运算的应用 镜子田地 题目描述
超全的
位运算
介绍与总结
位运算
隐藏在编程语言的角落中,其神秘而又强大,暗藏内力,有些人光听
位运算
的大名的心中忐忑,还有些人更是一看到
位运算
就远远离去,我之前也是。但狡猾的面试官往往喜欢搞偷袭,抓住我们的弱点搞我们,为了防患于未然,特记此篇!本篇的内容为
位运算
的介绍和一些比较经典的
位运算
问题
进行介绍分析,当然,
位运算
这么牛,后面肯定还是要归纳总结的。当然,上面的
问题
可能有更好的解法,也有更多经典
位运算
问题
将在后面归纳总结,希望本篇的
位运算
介绍能够让你有所收获,对
位运算
能有更深一点的认识。
C++ 语言
65,207
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章