由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一道面试题
相关主题
C问题,被64bit iPhone搞晕了这道题有什么好思路?
这类和数学有关的面试题怎么解决? (转载)get_innerHTML需要什么样的permission?
又一道面试题,我是不是想多了?如何才能到达内存带宽的极限呢?
fread/fwrite有big/small endian问题吗?紧急求助,C语言面试题
请教一个C的问题一个函数指针的问题
问达人一个shared memory 的问题python 如何查找数值并判断是否空
How to detect overflow in C?什么时候写程序要注意这个问题?
how to initialize this struct.再请教一个c++的简单问题(enumerated constant)
相关话题的讨论汇总
话题: return话题: int话题: 31话题: int32话题: sign
进入Programming版参与讨论
1 (共1页)
d********e
发帖数: 132
1
请实现一个具有以下功能的函数,但不能使用任何形式条件判断、分支、跳转等类型的
语句或指令:
int sign(INT32 x) {
if (x > 0) return 1;
else if (x == 0) return 0;
else return -1;
}
a****9
发帖数: 418
2
max(-1, min(1, x))
这样符合要求不

【在 d********e 的大作中提到】
: 请实现一个具有以下功能的函数,但不能使用任何形式条件判断、分支、跳转等类型的
: 语句或指令:
: int sign(INT32 x) {
: if (x > 0) return 1;
: else if (x == 0) return 0;
: else return -1;
: }

X****r
发帖数: 3557
3
There must be better solutions, but the following should work:
int sign(INT32 x) {
UINT32 u = x;
u |= u >> 16;
u |= u >> 8;
u |= u >> 4;
u |= u >> 2;
u |= u >> 1;
return ((UINT32)x >> 31) * ~0 | u & 1;
}

【在 d********e 的大作中提到】
: 请实现一个具有以下功能的函数,但不能使用任何形式条件判断、分支、跳转等类型的
: 语句或指令:
: int sign(INT32 x) {
: if (x > 0) return 1;
: else if (x == 0) return 0;
: else return -1;
: }

d****p
发帖数: 685
4
Basic idea is use sign bit to fill the first sizeof(int)-1 bits and use x^0
to fill the last bit.
a****l
发帖数: 8211
5
当然不符合,这叫作弊.

【在 a****9 的大作中提到】
: max(-1, min(1, x))
: 这样符合要求不

d****p
发帖数: 685
6

~~~~~~~ 除了这个二分法,好像想不出其他方法来检测是否全零

【在 X****r 的大作中提到】
: There must be better solutions, but the following should work:
: int sign(INT32 x) {
: UINT32 u = x;
: u |= u >> 16;
: u |= u >> 8;
: u |= u >> 4;
: u |= u >> 2;
: u |= u >> 1;
: return ((UINT32)x >> 31) * ~0 | u & 1;
: }

y***d
发帖数: 2330
7
做一个两位数 n,高位存放 x 是否是负数,低位存放 x-1 是否是负数,然后做一个数
组 r[]={1,0,-1,-1},r[n] 就是要得的返回值;大概这样可以?

【在 d****p 的大作中提到】
:
: ~~~~~~~ 除了这个二分法,好像想不出其他方法来检测是否全零

d****p
发帖数: 685
8
Wow, pretty cool.
These ppl who can figure it out in interview are really niu.

【在 y***d 的大作中提到】
: 做一个两位数 n,高位存放 x 是否是负数,低位存放 x-1 是否是负数,然后做一个数
: 组 r[]={1,0,-1,-1},r[n] 就是要得的返回值;大概这样可以?

t****t
发帖数: 6806
9
(((~x) & (x-1))>>31)&1
(translate: x==0 iff (~x has 1 on sign bit) and (x-1 has 1 on sign bit))
显然这种事情我们做硬件的太有优势了.

【在 d****p 的大作中提到】
: Wow, pretty cool.
: These ppl who can figure it out in interview are really niu.

t****t
发帖数: 6806
10
啊, 被你先说了.

【在 y***d 的大作中提到】
: 做一个两位数 n,高位存放 x 是否是负数,低位存放 x-1 是否是负数,然后做一个数
: 组 r[]={1,0,-1,-1},r[n] 就是要得的返回值;大概这样可以?

相关主题
问达人一个shared memory 的问题这道题有什么好思路?
How to detect overflow in C?get_innerHTML需要什么样的permission?
how to initialize this struct.如何才能到达内存带宽的极限呢?
进入Programming版参与讨论
d****p
发帖数: 685
11
Right. idea->code needs real experience.

【在 t****t 的大作中提到】
: (((~x) & (x-1))>>31)&1
: (translate: x==0 iff (~x has 1 on sign bit) and (x-1 has 1 on sign bit))
: 显然这种事情我们做硬件的太有优势了.

a****d
发帖数: 114
12
最后一步可否简化成:
return x >> 31 | u & 1;

【在 X****r 的大作中提到】
: There must be better solutions, but the following should work:
: int sign(INT32 x) {
: UINT32 u = x;
: u |= u >> 16;
: u |= u >> 8;
: u |= u >> 4;
: u |= u >> 2;
: u |= u >> 1;
: return ((UINT32)x >> 31) * ~0 | u & 1;
: }

t****t
发帖数: 6806
13
right shifting signed number is implementation-defined. xentar's version
ensured portability.

【在 a****d 的大作中提到】
: 最后一步可否简化成:
: return x >> 31 | u & 1;

l******e
发帖数: 12192
14
这个是经典老题

【在 d****p 的大作中提到】
: Right. idea->code needs real experience.
a****d
发帖数: 114
15
Oh... 牛啊

【在 t****t 的大作中提到】
: right shifting signed number is implementation-defined. xentar's version
: ensured portability.

f*******y
发帖数: 55
16
偶花了1个小时搞了个这样的 ((x>>31)||((0-x)>>31))*(2*(x>>31) + 1);
比我开始想象的要复杂多了。唉。。。各位有没有验证过其它的答案啊?
y***d
发帖数: 2330
17
|| 是逻辑操作

【在 f*******y 的大作中提到】
: 偶花了1个小时搞了个这样的 ((x>>31)||((0-x)>>31))*(2*(x>>31) + 1);
: 比我开始想象的要复杂多了。唉。。。各位有没有验证过其它的答案啊?

g**e
发帖数: 6127
18
int[] a = {1,0,-1,-1};
int t = (x>>>31)<<1 + (x-1>>>31);
return a[t];

【在 f*******y 的大作中提到】
: 偶花了1个小时搞了个这样的 ((x>>31)||((0-x)>>31))*(2*(x>>31) + 1);
: 比我开始想象的要复杂多了。唉。。。各位有没有验证过其它的答案啊?

f*******y
发帖数: 55
19
if x is int
{
max int return:1
min int return:13 //random
5 return:1
1 return:1
-5 return:-1
-1 return:-1
0 return:1
1 return:1
}
if x is unsigned int
{
max return:1
min return:-1
5 return:1
1 return:1
-5 return:-1
-1 return:-1
0 return:0
1 return:1
}
谢谢学习了。

【在 g**e 的大作中提到】
: int[] a = {1,0,-1,-1};
: int t = (x>>>31)<<1 + (x-1>>>31);
: return a[t];

f*******y
发帖数: 55
20
好玩儿,我再来一个: ((x>>31) *2 -((0-x)>>31)) % 2;
凑足茴香豆的写法。
相关主题
紧急求助,C语言面试题什么时候写程序要注意这个问题?
一个函数指针的问题再请教一个c++的简单问题(enumerated constant)
python 如何查找数值并判断是否空C 中的typedef 一问
进入Programming版参与讨论
l******e
发帖数: 12192
21
没说不让逻辑操作呀

【在 y***d 的大作中提到】
: || 是逻辑操作
y***d
发帖数: 2330
22
这就有分支跳转了

【在 l******e 的大作中提到】
: 没说不让逻辑操作呀
l******e
发帖数: 12192
23
为啥有逻辑运算就有分支跳转?

【在 y***d 的大作中提到】
: 这就有分支跳转了
h****g
发帖数: 71
24
int sign(INT32 x) {
return (x > 0)-(x<0);
}
1 (共1页)
进入Programming版参与讨论
相关主题
再请教一个c++的简单问题(enumerated constant)请教一个C的问题
C 中的typedef 一问问达人一个shared memory 的问题
is size_t recommended for 64-bit windows porting?How to detect overflow in C?
C# binary file reading problemhow to initialize this struct.
C问题,被64bit iPhone搞晕了这道题有什么好思路?
这类和数学有关的面试题怎么解决? (转载)get_innerHTML需要什么样的permission?
又一道面试题,我是不是想多了?如何才能到达内存带宽的极限呢?
fread/fwrite有big/small endian问题吗?紧急求助,C语言面试题
相关话题的讨论汇总
话题: return话题: int话题: 31话题: int32话题: sign