社区
C++ 语言
帖子详情
不用if语句,不用汇编,怎么使得两数之积总是小于等于255?
weiwuyuan
2012-10-11 10:34:27
我想使 a*b如果大于255,就让他等于255,
其中a和b都是整型
如果不用if语句,也不用汇编,怎么做到?
...全文
3555
59
打赏
收藏
不用if语句,不用汇编,怎么使得两数之积总是小于等于255?
我想使 a*b如果大于255,就让他等于255, 其中a和b都是整型 如果不用if语句,也不用汇编,怎么做到?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
59 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小测一波
2012-10-25
打赏
举报
回复
int m = (a*b)>255?255:a+b;
一个语句实现!简单!可读性好!
sjg20010414
2012-10-25
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
C/C++ code
int fun(int a,int b){
int arr[]={255, a*b};
return arr[a*b<=255];
}
[/Quote]
是不是可以借鉴这个思路
但原题应该限定a、b的范围,如unsigned char
// NoIf.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
unsigned char fun(unsigned char a, unsigned char b){
int product = a*b;
int arr[]={product,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
int index = (product&0xff00) >> 8;
return (unsigned char)(arr[index]);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a,b;
scanf("%d,%d", &a, &b);
printf("result = %d", fun(a,b));
return 0;
}
LXZ_2008
2012-10-25
打赏
举报
回复
//不用if语句,a*b都是整型,最高位是符号位,如果255减去a*b的结果小于0
//那么最高位为1,右移31位后,再只保留第一位,然后乘以255,如果a*b大于255,
//这个符号位为1,那么右移与0x01结果为1,不然就是0,然后再或上a*b则结果要不就是前8位是255,
//要不就是小于255,最后再来一个与0xff,这样当a*b大于255,结果就一定是255,小于255,则结果是a*b
//这个只是临时想的,没有优化,大家可以优化一下。^-^
int muti(int a,int b){
return (((((0xff-a*b)>>31)&0x01)*0xff)|(a*b))&0xff;
}
小测一波
2012-10-25
打赏
举报
回复
int m = (a*b)>255?255:a*b;
一个语句实现!简单!可读性好
Thirol
2012-10-24
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
C/C++ code
int fun(int a,int b){
int arr[]={255, a*b};
return arr[a*b<=255];
}
[/Quote]
耳目一新,厉害!
xhmx444
2012-10-23
打赏
举报
回复
原来可以不用条件分支语句写程序..
fuqu2518
2012-10-23
打赏
举报
回复
短路求值,简单好用。后面的各种代码学习了。
pupingpp
2012-10-22
打赏
举报
回复
各种大神,学习了
doc110
2012-10-22
打赏
举报
回复
这个很不错~~~
xokai
2012-10-21
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
C/C++ code
int fun(int a,int b){
int arr[]={255, a*b};
return arr[a*b<=255];
}
[/Quote]
厉害!简单易懂!
fshq3
2012-10-20
打赏
举报
回复
c=a*b
c=((c&(~0xff))-1)&0xff | (c&0xff)
YFLK
2012-10-17
打赏
举报
回复
溢出操作后只取内存低位字节就行!
JCIphone
2012-10-17
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
5L厉害。
[/Quote]
+++1
terrandom
2012-10-16
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
C/C++ code
unsigned int a = 4, b = 253;
unsigned int c = a * b;
bool dummy = (c &0xffffff00) && (c = 255);
[/Quote]
这最后的赋值就TM就是利用编译器的丑陋特性,语法上就跟写 if(NULL == c)是为了防止误写成 if(c=NULL) 一样的丑陋!
nooning
2012-10-14
打赏
举报
回复
用 语言特性可以
unsigned c=a*b;
bool r=c&0xffffff00;
(v = r*255) || (v=(!r)*c);
展开就是
(v= 255*((a*b)&0xffffff00)) || (v=c* !(a*b&0xffffff00))
nooning
2012-10-14
打赏
举报
回复
不好意思,一激动写反了
应该是
(!((a*b)&0xffffff00))*(a*b) | (!!((a*b)&0xffffff00))*255
也就是
unsigned c=a*b;
bool r=c&0xffffff00; 有符号0x7fffff00
v = r*255 + (!r)*c;
纯作为学术,无实际意义
nooning
2012-10-14
打赏
举报
回复
好简单的题 (!!((a*b)&0xffffff00))*(a*b) | (!((a*b)&0xffffff00))*255
也就是
c=a*b;
(!!(c&0xffffff00))*c+ (!(c&0xffffff00))*255
最容易理解的就是
unsigned c=a*b;
bool r=c&0xffffff00; 有符号0x7fffff00
v = r*c + (!r)*c;
纯作为学术,无实际意义
鬼火儿
2012-10-14
打赏
举报
回复
厉害啊
Roy_1986
2012-10-12
打赏
举报
回复
手太快。。。
(((a * b) / 255) ^ 0) * 255 + (!((( a * b) / 255) ^ 0)) * ((a * b) % 255)
Roy_1986
2012-10-12
打赏
举报
回复
上面写错了。。。
(!(((a * b) / 255) ^ 0)) * 255 + ((( a * b) / 255) ^ 0) * ((a*b) % 255)
加载更多回复(38)
c语言的
if语句
如何用
汇编
语言实现,使用
汇编
语言实现
IF语句
IF 结构包含一个布尔表达式,其后有两个语句列表:一个是当表达式为真时执行,另一个是当表达式为假时执行:if( boolean-expression )statement-list-1elsestatement-list-2结构中的 else 部分是可选的。在
汇编
语言...
if语句
的
汇编
表示
gcc产生的代码,可以使用objdump查看它对应的
汇编
代码(gcc查看
汇编
代码),本文主要介绍条件语句
if语句
的
汇编
表示 有以下代码: int max(int x,int y) { if (x>y) return x; else return y; } 产生的
汇编
代码如下: ...
5.11
汇编
语言:仿写IF条件语句
条件语句,也称为IF-ELSE语句,是计算机编程中的一种基本控制结构。它允许程序根据条件的真假来执行不同的代码块。条件语句在处理决策和分支逻辑时非常有用。一般来说,条件语句由IF关键字、一个条件表达式、一个或...
C语言与
汇编
——switch语句反
汇编
;do...while语句反
汇编
;while语句反
汇编
;for语句反
汇编
例如:在vc6.0编译器中,当分支个数
小于
4时,switch语句和
if语句
翻译成的
汇编
代码没有区别;当分支个数大于
等于
4时,switch语句的
汇编
代码变成了jg [edx*4+第一个分支代码的内存地址],其中,edx为switch (x)语句中x...
c语言中if怎么改成
汇编
语言,使用
汇编
语言实现
IF语句
IF 结构包含一个布尔表达式,其后有两个语句列表:一个是当表达式为真时执行,另一个是当表达式为假时执行:if( boolean-expression )statement-list-1elsestatement-list-2结构中的 else 部分是可选的。在
汇编
语言...
C++ 语言
64,701
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章